7

所以,我有一个名为“engine”的脚本,经过多次头疼和(徒劳的)调试,我发现 GC 根本没有重新加载它!

这就是我将它包含在网页中的方式(在<head>元素内部):

<script type="text/javascript" src="engine.js"></script>

当在脚本开头放置 10console.log("asdf");时,就好像它们不存在一样。当我转到 GC 控制台中的“资源”选项卡时,我看到该脚本没有应用任何更改!哈哈?将 a+ "?" + new Date()放在最后有帮助吗?

4

5 回答 5

27

适用于 Chrome、Firefox和IE 的通用解决方案是通过Ctrl++ (在 MacShiftDel⌘</kbd>+Shift+⌫</kbd>).

铬解决方案 #1

  1. 打开开发者工具(F12⌘</kbd>+⌥</kbd>+i, or right-click → Inspect).
  2. 选择网络选项卡并勾选禁用缓存复选框。

Chrome 禁用缓存 - 网络选项卡

  1. 重新加载页面。

❗️注意:只有在 devtools 窗口打开时才会禁用缓存。

铬解决方案 #2

这仅在不使用 #1 时才有意义。

  1. 打开开发者工具。
  2. 单击右下角的设置齿轮图标。
  3. 在出现的对话框中,选择网络子部分下的禁用缓存复选框:从现在开始,当 devtools 窗口打开时,缓存将被跳过。当 devtools 窗口关闭时,缓存将照常工作。

Chrome 在 devtools 设置中禁用缓存

Chrome 解决方案 #3:清空缓存 + 硬重新加载

  1. 打开开发者工具(否则下一步的菜单将不会显示)。
  2. 单击并按住Refresh按钮,然后从下拉列表中选择Empty Cache and Hard Reload

Chrome 硬刷新和缓存重置

修改javascript代码

可用于调试的与浏览器无关的解决方案是在您的服务器端代码中附加一个随机生成的版本字符串作为查询参数,即将您的脚本称为:

<script type="text/javascript" src="myscript.js?ver=12345"></script>

当参数值改变时,这个技巧将强制浏览器重新加载脚本ver。如果您发出 ajax 请求,那么您可以附加"?ver=" + new Date().getTime()到您的 URL。

注意:完成调试后不要忘记删除参数,因为在生产中您很可能确实希望缓存脚本。虽然在每个新构建上生成一个新的时间戳是一种常见的做法 - 这可以在生产中使用,并且将确保在新部署之后客户端将始终获得更新的脚本。


与上述所有解决方案不同,即使您在客户端和服务器之间有某种缓存(例如 redis、memcached、varnish)或 CDN(例如 akamai、cloudflare、cloudfront 等),这个解决方案也可以工作。

于 2012-04-06T16:00:11.313 回答
1

脚本可能已被缓存,因此旧版本正在从缓存中加载。如果您想确保获得新版本,您可以强制重新加载浏览器、清除浏览器缓存或更改脚本名称或在文件名末尾放置不同的查询参数。

于 2012-04-06T15:17:14.833 回答
1

这也困扰着我;CTRL+F5 或 SHIFT+F5 从来没有用过...唯一有效的方法是打开您的开发工具(按 F12),然后右键单击地址栏旁边的重新加载图标,然后选择“硬重新加载”或“清空”缓存和硬重载”

于 2017-04-13T08:05:53.537 回答
0

正如我在评论中所说,我猜这是一个缓存问题,一个 CTRL+F5 应该就足够了,以防它不能用于 CTRL+SHIFT+CANC 并清除浏览数据。然而,有时它是具有某种缓存的服务器,我说因为使用 IBM WebSphere,我经常遇到缓存问题,而我无法在浏览器上使用简单的 F5 来解决这些问题。我只需要等待我的网络服务器“刷新”自己。

于 2012-04-06T15:21:51.757 回答
0

在 2016 年 10 月 21 日最新的铬稳定。

    打开开发人员工具(F12 或右键单击 > 检查或地址栏右上角的垂直省略号图标 > 更多工具 > 开发人员工具)。

    单击开发人员工具导航栏 > 设置右上角的垂直省略号图标。
    在首选项部分找到网络 > 禁用缓存。
于 2016-10-21T06:06:49.440 回答