Javascript 强制刷新不';我不为海德工作
通过加载脚本时,我无法使用Ctrl+F5(或等效)键盘快捷键强制刷新内容 脚本缓存正确,浏览器遵守从服务器发送的缓存指令(我使用的是IIS 7.5)。但与直接包含在标记中的脚本标记不同,我不能覆盖缓存并强制刷新通过headjs加载的脚本 我假设这是脚本动态加载方式的结果。我可以接受这种行为,因为强制刷新只在开发期间方便,而且我知道可以通过其他方式强制从服务器检索内容 我只是想知道是否有人能解释为什么会这样 更新 在Live中,这对我们来说从来都不是问题,因为静态内容的缓存指令是正确设置的。这只是开发和QA中的一个问题,留给我的选项是Javascript 强制刷新不';我不为海德工作,javascript,browser-cache,head.js,Javascript,Browser Cache,Head.js,通过加载脚本时,我无法使用Ctrl+F5(或等效)键盘快捷键强制刷新内容 脚本缓存正确,浏览器遵守从服务器发送的缓存指令(我使用的是IIS 7.5)。但与直接包含在标记中的脚本标记不同,我不能覆盖缓存并强制刷新通过headjs加载的脚本 我假设这是脚本动态加载方式的结果。我可以接受这种行为,因为强制刷新只在开发期间方便,而且我知道可以通过其他方式强制从服务器检索内容 我只是想知道是否有人能解释为什么会这样 更新 在Live中,这对我们来说从来都不是问题,因为静态内容的缓存指令是正确设置的。这只是
- 将所有开发人员和QA浏览器配置为从不缓存内容
- 对于开发和QA环境,以不同的方式配置静态内容缓存指令——本质上是将MaxAge设置为非常小的值,这样内容总是会过期。仅在Live中设置正确的最大年龄值
我选择了第二个选项。动态脚本加载不是页面加载的一部分。强制刷新时,浏览器将重新加载页面及其HTML和引用的CSS文件中引用的所有资源,但使用
head.js
加载的脚本不会在页面内容中引用,浏览器无法确定head.js
将创建对其他资源的引用。在创建这些引用时,浏览器不再刷新页面,因此将应用常规缓存规则
您可以通过将唯一的查询字符串附加到其URL(例如,
jquery.js?random=437593486394
)来强制重新加载脚本,但这将禁用页面所有加载的缓存,而不仅仅是在您强制刷新时。动态脚本加载不是页面加载的一部分。强制刷新时,浏览器将重新加载页面及其HTML和引用的CSS文件中引用的所有资源,但使用head.js
加载的脚本不会在页面内容中引用,浏览器无法确定head.js
将创建对其他资源的引用。在创建这些引用时,浏览器不再刷新页面,因此将应用常规缓存规则
您可以通过将唯一的查询字符串附加到其URL(例如,
jquery.js?random=437593486394
)来强制重新加载脚本,但这将禁用页面所有加载的缓存,而不仅仅是在您强制刷新时。这也是require.js的问题。希望其中一个解决方法也适用于Head.Js
- 如果使用Chrome,请打开“网络”选项卡上的“开发人员工具”面板,右键单击并选择“清除浏览器缓存”
- 通过在js资源的查询字符串中附加一个日期时间戳来进行一些“缓存破坏”
- 如果您正在使用IIS(看起来您是)。转到网站的HTTP响应标题面板,单击设置公用标题并将过期Web内容设置为立即
这也是require.js的一个问题。希望其中一个解决方法也适用于Head.Js
- 如果使用Chrome,请打开“网络”选项卡上的“开发人员工具”面板,右键单击并选择“清除浏览器缓存”
- 通过在js资源的查询字符串中附加一个日期时间戳来进行一些“缓存破坏”
- 如果您正在使用IIS(看起来您是)。转到网站的HTTP响应标题面板,单击设置公用标题并将过期Web内容设置为立即
我不会说这是一个动态或非动态的问题,当您注入脚本时,它仍然会导致浏览器发出HTTP请求并应用它应用的任何缓存逻辑 就像上面提到的,如果你不想缓存脚本,不管是动态的还是静态的,你通常需要以查询字符串的形式给它附加一个时间戳
如果您只想查看更改是否有效,请在浏览器中执行强制刷新…通常CTRL+F5我不会说这是动态或非动态的问题,当您插入脚本时,它仍然会导致浏览器发出HTTP请求并应用它应用的任何缓存逻辑 就像上面提到的,如果你不想缓存脚本,不管是动态的还是静态的,你通常需要以查询字符串的形式给它附加一个时间戳
如果您只想查看更改是否有效,请在浏览器中执行强制刷新…通常使用CTRL+F5谢谢您的解释。浏览器只能确定静态引用,而不能确定运行时生成的引用,这是有道理的。我错误地认为浏览器会在实际发出请求时强制刷新,因为所有请求都发生在运行时,所以它也会包括head.js发出的这些动态请求。再次感谢。谢谢你的解释。浏览器只能确定静态引用,而不能确定运行时生成的引用,这是有道理的。我错误地认为浏览器会在实际发出请求时强制刷新,因为所有请求都发生在运行时,所以它也会包括head.js发出的这些动态请求。再次感谢,谢谢你的选择。非常有用。我会为IE9+的用户添加另一个。在开发者工具->缓存菜单下,有一个选项“总是从服务器刷新”。这似乎很管用。谢谢你的选择。非常有帮助