【问题标题】:IE 7 & 8 javascript file undesirably caching with require.jsIE 7 & 8 javascript 文件被 require.js 缓存
【发布时间】:2011-04-25 23:17:14
【问题描述】:

我有一个页面 javascript page.js 正在加载 require.js。 page.js的调用放在了require.js调用之后的页面底部,如下:

<script>
    require(["page"]);
</script>

page.js 中的函数不会在每次访问页面时都执行。

要清楚,警报('hello');在 page.js 的中间会被提醒最多但不是所有的时间。我很确定这不是现有的 IE 问题,并且只要没有其他 JS 错误,就会始终执行简单的警报。

95% 的时间页面及其对应的函数执行,大约 5% 的时间 IE 浏览器不会重新执行 page.js 的内容。

我不认为这是一个固有的 IE 问题,而是 require.js 在 IE 中发现了相关的激进缓存问题。

编辑: 澄清一下,当错误发生时,page.js 文件在 f12 dom 加载中可见。该页面已正确缓存。问题是缓存的代码文件没有重新运行!

比如这个文件中的alert没有被执行!

我不确定 require.js 的内部结构,但我想他们会为资源执行 xhr 并对其进行评估。似乎 xhr 已完成并加载到 dom 中,但 eval 无法正常工作。 (这当然是猜测,因为我对 require.js 的内部了解不够多)。

【问题讨论】:

  • 问题是....? :p
  • 问题是我如何不让 IE7 和 IE8 使用 require.js 进行不受欢迎的缓存
  • 您是否尝试过将代码放入名为“init”的函数中,然后在 require 语句之后调用它的解决方法?不知道您的应用程序做了什么,不确定这对于您的应用程序是否可行且可维护。我使用的 dojo 提供了自己的 require 功能,但我没有注意到您遇到的问题。

标签: javascript internet-explorer caching internet-explorer-8 require


【解决方案1】:

我知道防止缓存 js 文件的唯一方法是在末尾添加一个随机字符串: 示例:

<script src="http://www.mydomaine.com/myjsfile.js?t=123456"></script>

使用 md5 哈希或 wathever 随机生成“t”参数内容,这使浏览器每次都认为它是不同的文件。

【讨论】:

    【解决方案2】:

    问题可能不是由于缓存造成的。缓存基本上是在服务器端控制的,所以如果您不想缓存文件,您可以让服务器设置缓存控制标头来执行此操作。缓存不会影响 javascript 文件是否“执行”,它只会影响浏览器在尝试解析给定资源时从何处获取数据。通常,出于性能原因,您希望缓存 .js 文件。

    在您的情况下,缓存可能不是真正的问题。当使用动态 javascript 源加载器(像 dojo 这样的库支持这一点)时,您加载的文件最好包含在以下内容中:

    (function(){
    
    // Main code here...
    
    })();
    

    这定义了一个匿名函数,然后立即执行它。这具有以下优点:

    • 创建一个闭包,以便您可以声明仅在文件范围内可见的变量。

    • 确保执行任何直接可执行的语句。

    注意,我不熟悉require.js,所以它可能会在您的问题中发挥作用。此外,您没有通过 require 提供您正在加载的文件,它可能存在导致您遇到的不一致的错误。

    【讨论】:

    • 我 +1 得到了一个很好的答案,虽然我知道这些东西而不是我问题的真正答案:) 我即将更新我的问题以澄清一下。我有一个闭包,我准备好了 jQuery 文档,我有 require.Ready 闭包等。似乎没有任何工作。
    【解决方案3】:

    结论: IE(它最常发生的地方)有点吞噬错误,当我们能够在 Chrome 中重现它时,我们发现一个错误,表明我们的一个全局 func 尚未加载,因为全局 funcs 文件没有添加到需求列表中。不幸的是,我们没有使用 require.js 的编译 + 优化,如果没有 将 globals.js 作为依赖项的隐含列表,它可能会或可能不会失败。

    我想最重要的是确保调用的任何函数本身都定义在 require 块中隐式列出的依赖项中!

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 2014-12-22
      • 2012-03-23
      • 2012-01-11
      • 2011-08-20
      相关资源
      最近更新 更多