service-worker - 当您将版本/哈希添加到服务工作线程文件时会发生什么?
问题描述
我认为通过在其文件名中添加版本字符串来为您的服务工作者使用缓存清除是一个坏主意。这在任何教程中都没有提到,我也从未在野外见过这种方法。
您应该使用 service worker 文件的响应标头中的no-cache
指令和max-age
字段。
但是由于我没有找到关于这种方法的专门声明,所以我尝试了一下,似乎如果你更改了 service worker 文件,就很难摆脱旧的。所以我可以在开发工具的源选项卡中看到这两个文件。
但是您不会立即在应用程序选项卡中看到新的服务人员,所以我不确定是什么阻碍了新的 SW 负责以及它实际上在等待什么。
有谁知道,浏览器通常如何处理这种情况?
解决方案
这里有一些指导建议为什么应该避免这种情况:
避免更改 Service Worker 脚本的 URL
如果你读过我关于缓存最佳实践的文章,你可以考虑为你的服务工作者的每个版本提供一个唯一的 URL。不要这样做!对于服务人员来说,这通常是不好的做法,只需在其当前位置更新脚本即可。
它会让你遇到这样的问题:
- 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 的位置。嗯。
推荐阅读
- wiremock - WireMock 场景 - 部分修改并发请求的响应映射
- php - 在雄辩的 laravel 中更新级联不起作用
- django - django save() 接受 1 个位置参数,但给出了 2 个
- resampling - .resample('M') 的问题
- mysql - group by 在查询连接中出现错误,例如 SELECT 列表不在 GROUP BY 子句中并且包含非聚合列
- r - 有什么方法可以访问 ComplexHeatmap 的移位矩阵?
- python - 在 Windows 7 中为 python2.7 安装 statsmodels 时出错
- angular - 如何在 Angular 中调试外部库?
- git - 初始化“空”目录
- nginx - nginx 使用子域和裸域重定向