【问题标题】:How to avoid asking the clients to clear browser cache for the latest Javascript changes?如何避免要求客户端清除浏览器缓存以获取最新的 Javascript 更改?
【发布时间】:2013-08-09 18:33:30
【问题描述】:

客户端会报告我们的 JS-heavy 应用程序中的错误,我们修复了它,但客户端的浏览器仍在使用缓存的副本。这种情况经常发生,要求我们的客户刷新他们的浏览器缓存似乎非常低技术和麻烦。

我们知道?ver=xxx 解决方法,但我们使用RequireJS,因此应用这样的hack 并不容易。

HTTP 缓存控制会起作用吗?但是,我们注意到 IIS 不会立即获取 JS 文件更改,并且 HTTP 标头(上次修改)没有反映最新的更改。

ETag 会更好吗?与上次在 IIS 上修改相比是更好还是更差?

还有其他解决方案吗?谢谢

【问题讨论】:

  • 那么您是否使用 RequireJS 加载所有脚本?
  • 不是全部,但如果?ver= 仍然是最好的方法,那么我们将继续使用它。
  • 好吧,正确使用缓存的“最佳”方式是将 URL 设置为:/resources/cachebusterValueHere/js/script.js,当您的项目需要新版本时,您将更新 cachebusterValueHere。这将需要您更改服务器映射此 URL 的方式,并且不应该太难。而且您必须设置您的服务器以使用正确的标头以确保它们被缓存

标签: javascript iis coldfusion requirejs http-caching


【解决方案1】:

RequireJS 有一个cache busting property 可以使用 -:

require.config({
    urlArgs: "bust=" + (new Date()).getTime()
});

编辑-:但是,正如 Ian 在下面指出的那样,在他们的文档中建议不要以这种方式将其用于生产代码。

每次您将新的提交推送到生产环境时,也许您可​​以添加一个特定的版本号。

require.config({
        urlArgs: "ver=1.1.1"
    });

【讨论】:

  • 来自他们的文档:During development it can be useful to use this, however be sure to remove it before deploying your code.
  • @Ian Thx,我只是将 JS 时间替换为版本号或其他内容。
  • @Henry 请注意,这绝不会允许缓存 JS 文件
猜你喜欢
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2012-01-10
  • 2021-05-05
  • 2017-08-05
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多