Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 强制刷新不';我不为海德工作_Javascript_Browser Cache_Head.js - Fatal编程技术网

Javascript 强制刷新不';我不为海德工作

Javascript 强制刷新不';我不为海德工作,javascript,browser-cache,head.js,Javascript,Browser Cache,Head.js,通过加载脚本时,我无法使用Ctrl+F5(或等效)键盘快捷键强制刷新内容 脚本缓存正确,浏览器遵守从服务器发送的缓存指令(我使用的是IIS 7.5)。但与直接包含在标记中的脚本标记不同,我不能覆盖缓存并强制刷新通过headjs加载的脚本 我假设这是脚本动态加载方式的结果。我可以接受这种行为,因为强制刷新只在开发期间方便,而且我知道可以通过其他方式强制从服务器检索内容 我只是想知道是否有人能解释为什么会这样 更新 在Live中,这对我们来说从来都不是问题,因为静态内容的缓存指令是正确设置的。这只是

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

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

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

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

更新 在Live中,这对我们来说从来都不是问题,因为静态内容的缓存指令是正确设置的。这只是开发和QA中的一个问题,留给我的选项是

  • 将所有开发人员和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+的用户添加另一个。在开发者工具->缓存菜单下,有一个选项“总是从服务器刷新”。这似乎很管用。谢谢你的选择。非常有帮助