是否可以比使用它更早一页预加载JavaScript文件?

时间:2015-04-24 20:33:54

标签: javascript caching dojo

由于依赖系统的形式化程度低于我想要的,我现在有一个非常非常大的“主”JS文件,其中包含一个非常大的厨房水槽,可以在我的应用程序的每个页面中使用;也就是说,一旦你登录了。

加载只需几秒钟,但这几秒钟对于登录主页的首次体验来说并不是很好。所以,我想找到一种在我的登录页面上加载我的脚本的方法,这样当浏览器在主页上请求它时,它会得到304 Not Modified响应,或者只是知道不重新请求它。这是我尝试过的。

只包括<script>

遗憾的是,这不起作用,因为有问题的脚本没有“定义保护”。在页面上包含它会使登录页面变得混乱,因为它预期存在某些<div>。它是通过dojo构建的,我不想破解构建的文件,所以我不想在这样的检查中包围它的代码。

用XHR

抓住它

我实际上已将此修复程序暂存了一段时间,它似乎在Chrome中正常运行;一旦登录页面被完全加载,我的脚本就会发送一个XHR到“js / masterFile.js”并且不对它做任何事情。假设只要缓存标头没问题,浏览器将在以后需要该文件作为脚本时保留它。正如我所说,事实证明大多数浏览器似乎没有这种方式。有些人重用他们从XHR获得的“文本”,其他人似乎以不同于其他内容的方式缓存脚本;它可能是与安全相关的问题。

将其加载到iframe

这是一种进入岩石领域,因为我不喜欢iframe,这是一个额外的要求。但是,这样做至少会让浏览器以正确的方式缓存脚本。虽然它引入了很多代码复杂性,但我对于解决这个问题犹豫不决。

如果它有帮助,脚本是AMD兼容的;但是,有问题的主脚本是一个“引导层”,它包含require / define的基本定义。

1 个答案:

答案 0 :(得分:0)

好吧,我刚刚找到了这样做的可能方法;我目前没有时间对其进行全面测试,但它似乎在基础层面上工作。

<script src="myMasterScript.js" type="text/definitelynotjavascriptnopenosir"></script>

以有趣的方式运作。我可以看到请求是针对脚本源的,如果它是有效的JavaScript,它将执行。 (仅从JQuery CDN中可以看出)但是,浏览器的控制台基本上会压制运行它时出现的任何错误;即,“哦。也许我不应该这样做。”

出于我自己的目的,我仍然需要根据JQuery场景弄清楚这是否会在某种程度上弄乱页面。