【发布时间】:2015-04-25 05:17:03
【问题描述】:
由于依赖系统没有我想要的那么正式,我现在有一个非常非常大的“主”JS 文件,其中包含一个非常大的厨房水槽,可在我的应用程序的每个页面中使用;也就是说,一旦您登录。
加载只需要几秒钟,但是这几秒钟对于首次登录主页的体验来说并不是很好。所以,我想找到一种在我的登录页面上加载我的脚本的方法,这样当浏览器在主页上请求它时,它要么得到 304 Not Modified 响应,要么只是知道不重新请求它。这是我尝试过的。
只包括<script>
不幸的是,这不起作用,因为有问题的脚本没有“定义保护”。将它包含在页面上会扰乱登录页面,因为它期望存在某些<div>s。它是通过dojo构建的,我不想破解构建的文件,所以我不想在这样的检查中包围它的代码。
用 XHR 抓住它
我实际上已经修复了一段时间,它在 Chrome 中似乎可以正常工作;一旦登录页面完全加载,我的脚本就会向“js/masterFile.js”发送一个 XHR,并且什么也不做。假设是只要缓存头没问题,浏览器在以后需要该文件作为脚本时就会保留它。正如我所说,事实证明大多数浏览器似乎都不是这样工作的。有些人重用了他们从 XHR 中获得的“文本”,有些人似乎以不同于其他内容的方式缓存脚本;这对他们来说可能是一个与安全相关的问题。
在 iframe 中加载它
这有点进入困难领域,因为我不喜欢 iframe,这是一个额外的要求。但是,这样做至少会让浏览器以正确的方式缓存脚本。但是它引入了很多代码复杂性,我犹豫要不要解决这个问题。
如果有帮助的话,脚本是 AMD 兼容的;但是,有问题的主脚本是一个“引导层”,其中包含 require/define 的基本定义。
【问题讨论】:
-
您可以随时扩展您的 XHR 修复程序以将代码填充到 sessionStorage
-
@PaulS。嗯...然后在下一页运行 eval() ?那是……一种有趣的修复方法。我需要考虑它是否具有安全隐患。另外,我想确定这不会弄乱任何试图通过 AMD 检索它的东西(当然,如果它不在缓存存储中,它会首先查找实际的脚本文件)
-
你为什么要把事情复杂化?如果 iframe 有效,为什么不使用它?对我来说,这听起来比做一些 ajax 调用更好(即使它适用于所有浏览器)
-
我的部分想法是,只要我想预加载脚本,就需要我编写 iframe,但我并没有真正考虑过通过 JS 手动访问自制 iframe 是否可行.我以后可能会重温它。
标签: javascript caching dojo