是否可以提前一页预加载JavaScript文件?

是否可以提前一页预加载JavaScript文件?,javascript,caching,dojo,Javascript,Caching,Dojo,由于依赖关系系统没有我想要的那么正式,我现在有一个非常非常大的主JS文件,其中包含一个相当大的厨房水槽,可以在我的应用程序的每个页面中使用;也就是说,一旦您登录 加载只需几秒钟,但这几秒钟对于登录主页的第一次体验来说并不太好。因此,我想找到一种在我的登录页面上加载脚本的方法,这样当浏览器在主页上请求脚本时,它要么得到一个304 Not Modified响应,要么知道不需要重新请求。这是我试过的 包括 不幸的是,这不起作用,因为所讨论的脚本没有适当的定义保护。将其包含在页面上会弄乱登录页面,因为它

由于依赖关系系统没有我想要的那么正式,我现在有一个非常非常大的主JS文件,其中包含一个相当大的厨房水槽,可以在我的应用程序的每个页面中使用;也就是说,一旦您登录

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

包括 不幸的是,这不起作用,因为所讨论的脚本没有适当的定义保护。将其包含在页面上会弄乱登录页面,因为它预期会出现某些错误。它是通过dojo构建的,我不想对构建的文件进行黑客攻击,所以我不想在这样的检查中包含它的代码

用XHR抓住它 事实上,我有一段时间对此进行了修复,它在Chrome中似乎可以正常工作;登录页面完全加载后,我的脚本会向js/masterFile.js发送一个XHR,但不会对其执行任何操作。假设只要缓存头没有问题,浏览器就会在以后需要该文件作为脚本时保留它。正如我所说,大多数浏览器似乎都不是这样工作的。有些人重用从XHR获得的文本,另一些人似乎以不同于其他内容的方式缓存脚本;这可能是他们的安全问题

在iframe中加载它 这是一种进入岩石领域,因为我不喜欢iframes,这是一个额外的要求。但是,这样做至少可以让浏览器以正确的方式缓存脚本。不过,这会导致很多代码复杂化,我对此犹豫不决


如果有帮助的话,脚本是AMD兼容的;但是,所讨论的主脚本是一个引导层,它包含require/define的基本定义。

好吧,我刚刚找到了一种可能的方法;我目前没有时间彻底测试它,但它似乎在一个基本的层面上工作

<script src="myMasterScript.js" type="text/definitelynotjavascriptnopenosir"></script>
这是一种有趣的方式。我可以看到该请求是针对脚本源的,如果它是有效的JavaScript,它将执行。但是,正如仅仅参考JQuery CDN所发现的,浏览器的控制台将基本上消除运行它时出现的任何类型的错误;哎呀。也许我不该这么做


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

您可以随时扩展XHR修复程序,将代码塞进其中sessionStorage@PaulS. 嗯…然后在下一页进行评估?这是一种很有趣的修复方法。我需要考虑一下它是否有安全隐患。另外,我想确定的是,这不会让试图通过AMD检索它的任何事情变得一团糟。当然,AMD会首先查找一个实际的脚本文件,如果它不在它的缓存存储中,那么为什么要过度复杂呢?如果iframe工作,为什么不使用它?对我来说,这听起来比执行一些ajax调用更好,即使它可以在所有浏览器中工作。我在某种程度上认为,在我想要预加载脚本的任何时候,都需要我编写一个iframe,但我并没有真正想过是否可以通过JS手动访问自制的iframe。我可能以后再看。