我认为通过在服务工作线程的文件名中添加版本字符串来使用缓存清除是一个坏主意。任何教程中都从未提到过这一点,而且我也从未在野外见过这种方法。
您应该在 Service Worker 文件的响应标头中使用
no-cache
指令 和 max-age
字段。
但是由于我没有找到关于此方法的专门声明,所以我尝试了一下,似乎如果您更改了 Service Worker 文件,就很难摆脱旧的文件。所以我可以在开发工具的sources选项卡中看到这两个文件。
但是您不会立即在 application 选项卡中看到新的 Service Worker,所以我不确定是什么阻碍了新的 SW 负责以及它实际上在等待什么。
有人知道,浏览器通常如何处理这种情况吗?
这里有一些指导,建议为什么应该避免这种情况:
避免更改 Service Worker 脚本的 URL
如果你已经读过我的 发布于 缓存最佳实践,您可以考虑提供您的每个版本 Service Worker 具有唯一的 URL。不要这样做!这通常是不好的 Service Worker 的实践,只需更新当前脚本即可 位置。
它可能会让你遇到这样的问题:
- index.html 将 sw-v1.js 注册为 Service Worker。
- sw-v1.js 缓存并提供index.html,因此它首先离线工作。
- 您更新了index.html,以便它注册您的新的闪亮的sw-v2.js。
如果执行上述操作,用户永远不会获得 sw-v2.js,因为 sw-v1.js 是 从缓存中提供旧版本的index.html。你已经把 您自己处于需要更新 Service Worker 的位置 以便更新您的 Service Worker。呃。
有什么方法可以拦截 Service Worker 请求,除非我们确认弹出窗口为“OK”,否则哈希值不应更新到缓存存储中?