Chrome没有加载最新版本的Web Worker脚本(运行缓存版本)

10

如果我编辑了我的Web worker脚本并刷新页面,Web worker脚本是一个缓存版本。我相当自信这不是我的Web服务器的问题,因为我可以立即加载所有其他文件的最新副本,即使重新启动Web服务器也无法解决问题。它只有在我重启Chrome时才会加载Web worker脚本的最新版本,这无疑效率非常低下!即使我重新启动Chrome,问题仍然存在。是否有任何方法可以解决这个问题?

7个回答

16
在我的Linux Chrome浏览器中,我需要右击(或长按)刷新按钮,然后选择“清空缓存并强制刷新”才能获取最新版本。

长按鼠标按钮直到菜单弹出来即可进行长按操作。@Brian:我甚至不知道那里有这个功能。Ctrl+F5因某些原因无法使用,但这个方法完美解决了问题。 - Forest Katsch

7
您的Web服务器决定了一个给定Web资源的缓存属性,而浏览器会尽力尊重这些设置,缓存那些Web服务器允许缓存的资源,并且不缓存那些不应该被缓存的内容。
如果您想更改它,您有以下几个选项:
  1. 手动清除浏览器缓存
  2. 暂时关闭浏览器缓存。
  3. 暂时更改您的Web服务器设置,指示浏览器不要缓存
  4. 覆盖缓存,仅针对此Web页面(在某些浏览器中为shift-F5)以强制重新加载新内容
  5. 向Web工作程序脚本的URL添加查询参数,每次更改以便加载新版本。

4
Chrome的硬刷新不会刷新工作者(workers),仍然使用缓存版本。 - riv
如果您发现使用此答案后您的serviceworker仍未更新,请检查其是否包含错误。因为如果serviceworker包含JavaScript错误并且无法安装,则旧版本仍将继续使用。 - Bas Goossen
@BasGoossen - 如果你没有意识到,这个问题是关于Web Workers(在web页面的不同线程中运行的脚本),而不是Service Workers(不同的东西)。 - jfriend00
@jfriend00 哎呀,我的错。不过这个可能也适用于 Web Workers 吧?最近一直在处理 Service Workers,所以有点混淆了。 - Bas Goossen
@BasGoossen - 没有WebWorker功能可以在较新的脚本出现错误后自动加载旧脚本。 - jfriend00
  1. 在另一个选项卡中加载工作脚本。每当您修改它时,手动重新加载该页面。如果您要重新加载5次,那可能是合理的,如果是50次,我喜欢Yuri的技巧,将其添加到您会记得重新加载的页面中。
- ericP

3

您尝试过强制刷新吗?Ctrl-r?


Ctrl+R 是一般的刷新,我想……也许是 Ctrl+Shift+R? - Ry-

1
在页面头部添加<script src="your_worker_path"></scripts>以强制更新缓存。
将您的工作者代码包含在if(typeof window == "undefined"){...}中,以避免在页面重新加载时开始执行。

0
在您的install事件中,在调用event.waitUntil之前添加以下内容:
if (self.skipWaiting) { self.skipWaiting(); }

源代码

此外,您可以遵循以下开发工作流程:

  1. 将服务器配置为将您的 Service Worker 脚本设置为不可缓存(cache-control: no-cache)
  2. 在更改了 Service Worker 脚本后:
    1. 关闭除一个指向您的 Web 应用程序的选项卡之外的所有选项卡
    2. 按 shift-reload 键绕过 Service Worker,以确保剩余的选项卡不受 Service Worker 控制
    3. 按 reload 键,以便让更新版本的 Service Worker 控制页面。

源代码


0

您必须关闭打开此页面的所有选项卡。仅打开一个选项卡,然后按Ctrl + Shift + R进行刷新,缓存将被清除。


0

我发现的方法是:

  • 打开一个新标签页,输入SharedWorker脚本的URL,
  • 您应该能够看到此选项卡包含脚本的缓存版本
  • 如果您然后Shift-Reload 选项卡,浏览器将强制更新缓存文件

Chrome在“Shift-Reload”上重新加载“资源”的方式似乎是...不稳定的。


希望你能找到这个链接:chrome://inspect/#workers。你可以在这里终止工作线程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接