当您将版本/哈希添加到 Service Worker 文件时会发生什么?

Bai*_*Dev 2 browser-cache service-worker

我认为通过在服务工作线程的文件名中添加版本字符串来使用缓存清除是一个坏主意。任何教程中都从未提到过这一点,而且我也从未在野外见过这种方法。

您应该使用Service Worker 文件的响应标头中的no-cache指令max-age字段。

但由于我没有找到关于此方法的专门声明,我尝试了一下,似乎如果您更改服务工作人员文件,就很难摆脱旧的文件。所以我可以在开发工具的源选项卡中看到这两个文件。

来源:两个 SW 文件

但是您不会立即在应用程序选项卡中看到新的服务工作人员,所以我不确定是什么阻碍了新的软件负责以及它实际上在等待什么。

新软件(已重命名!)等待安装

有谁知道浏览器通常如何处理这种情况?

Jef*_*ick 5

以下是一些指导建议,说明为什么应该避免这种情况:

避免更改 Service Worker 脚本的 URL

如果您已阅读我关于缓存最佳实践的文章,您可以考虑为每个版本的 Service Worker 提供一个唯一的 URL。不要这样做!对于服务人员来说,这通常是不好的做法,只需在当前位置更新脚本即可。

它可能会让你遇到这样的问题:

  1. index.html 将 sw-v1.js 注册为服务工作者。
  2. sw-v1.js 缓存并提供index.html,因此它首先离线工作。
  3. 您更新了index.html,以便它注册您的新的闪亮的sw-v2.js。

如果执行上述操作,用户永远不会获得 sw-v2.js,因为 sw-v1.js 正在从其缓存中提供旧版本的 index.html。您已经将自己置于需要更新 Service Worker 才能更新 Service Worker 的境地。呃。

  • 使用不同名称注册 SW 文件将触发 SW 更新。在保持相同名称的情况下更改 SW 文件的内容也会触发 SW 更新。保持相同的名称并更改文件的内容要简单得多,然后您不必担心“index.html”是缓存优先还是网络优先。 (3认同)