【问题标题】:What happens when you add a version/hash to your service worker file?当您将版本/哈希添加到服务工作线程文件时会发生什么?
【发布时间】:2019-01-11 10:51:30
【问题描述】:

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

您应该在 service worker 文件的响应标头中使用 no-cache directivemax-age field

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

但您不会立即在 application 选项卡中看到新的 Service Worker,所以我不确定是什么阻碍了新的 SW 负责以及它实际上在等待什么。

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

【问题讨论】:

    标签: service-worker browser-cache


    【解决方案1】:

    Here's some guidance 建议为什么应该避免这种情况:

    避免更改 Service Worker 脚本的 URL

    如果你有read my post 缓存最佳实践,你可以考虑给你的每个版本 服务工作者一个唯一的 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。你放了 您自己处于需要更新服务人员的位置 为了更新您的服务人员。呃。

    【讨论】:

    • 本节说 sw-v1.js 缓存并服务 index.html,因此它首先离线工作。,但我们可以创建一个使用 的 SW index.html 的网络优先策略。在这种情况下,我们不会陷入僵局,对吧?
    • 另外,我仍然想更好地了解浏览器在处理同名和不同名的服务工作者文件方面的区别。还是更新过程其实是一样的?
    • 使用不同名称注册 SW 文件将触发 SW 更新。在保持相同名称的同时更改 SW 文件的内容也会触发 SW 更新。保持相同的名称并更改文件的内容要简单得多,然后您不必担心index.html 是缓存优先还是网络优先。
    • 虽然这可能有些离题,但我认为值得一提的是 .webmanifest(或 manifest.json 文件(可能)也不应该被版本化:github.com/w3c/manifest/issues/446#issuecomment-351368893
    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多