首页 > 解决方案 > 当您将版本/哈希添加到服务工作线程文件时会发生什么?

问题描述

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

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

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

来源:两个 SW 文件

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

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

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

标签: service-workerbrowser-cache

解决方案


这里有一些指导建议为什么应该避免这种情况:

避免更改 Service Worker 脚本的 URL

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

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

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

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


推荐阅读