0

通过Head JS加载脚本时,我无法使用 Ctrl+F5(或等效)键盘快捷键强制刷新内容。

脚本缓存正确,浏览器遵循从服务器发送的缓存指令(我使用的是 IIS 7.5)。但与标记中直接包含的脚本标签不同,我无法覆盖缓存并强制刷新通过 Head JS 加载的脚本。

我假设这是动态加载脚本方式的结果。我可以忍受这种行为,因为强制刷新仅在开发期间很方便,而且我知道可以强制从服务器检索内容的其他方法。

我只是想知道是否有人可以解释为什么会这样......

更新

这在 Live 中对我们来说从来都不是问题,因为我们的静态内容的缓存指令设置得当。这只是开发和质量检查中的一个问题,留给我的选项是......

  • 将所有 Dev 和 QA 浏览器配置为从不缓存内容。
  • 为 Dev 和 QA 环境配置不同的静态内容缓存指令 - 本质上将 MaxAge 设置为如此之小以至于内容总是会过期的东西。仅在 Live 中设置正确的 MaxAge 值。

我选择了第二个选项。

4

3 回答 3

2

动态脚本加载不是页面加载的一部分。当您强制刷新时,浏览器会重新加载页面以及在其 HTML 和引用的 CSS 文件中引用的所有资源,但您加载的脚本head.js不会在页面内容中引用,并且浏览器无法确定head.js将要创建的内容对其他资源的引用。在创建这些引用时,浏览器不再刷新页面,因此应用正常的缓存规则。

您可以通过将唯一查询字符串附加到它们的 URL(例如jquery.js?random=437593486394)来强制重新加载脚本,但这将禁用对页面所有加载的缓存,而不仅仅是在您强制刷新时。

于 2012-10-02T09:09:55.427 回答
1

这也是 require.js 的一个问题。希望这些变通方法之一也适用于 Head.Js

  • 如果使用 Chrome,请打开“网络”选项卡上的开发人员工具面板,右键单击并选择“清除浏览器缓存”
  • 通过将日期时间戳附加到 js 资源的查询字符串来做一些“缓存破坏”
  • 如果您使用 IIS(看起来像您)。转到您网站的 HTTP 响应标头面板,单击 Set Common Headers 并将 Expire Web content 设置为立即。

后者是我开发机器的首选

IIS HTTP 响应标头面板

于 2012-10-02T09:13:04.617 回答
0

我不会说它是动态还是非动态的问题,当您注入脚本时,它仍然会导致浏览器发出 HTTP 请求并应用它应用的任何缓存逻辑。

如上所述,如果您不希望脚本被缓存..动态或静态,没关系,您通常必须以查询字符串的形式附加时间戳。

如果您只想查看更改是否有效,请在浏览器中强制刷新...通常是 CTRL+F5

于 2012-11-07T11:46:29.603 回答