Service worker 将版本/哈希添加到服务工作者文件时会发生什么?

Service worker 将版本/哈希添加到服务工作者文件时会发生什么?,service-worker,browser-cache,Service Worker,Browser Cache,我认为,通过在文件名中添加一个版本字符串来为您的服务人员使用缓存破坏是一个坏主意。这在任何教程中都没有提到,我也从未在野外见过这种方法 您应该在服务工作者文件的响应头中使用和 但是,由于我没有找到关于这种方法的专门声明,我尝试了它,似乎如果您更改服务人员文件,就很难摆脱旧文件。因此,我可以在dev工具的sources选项卡中看到这两个文件 但您不会立即在“应用程序”选项卡中看到新的服务人员,因此我不确定是什么阻碍了新软件的管理,以及它实际上在等待什么 有人知道浏览器通常是如何处理这种情况的吗

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

您应该在服务工作者文件的响应头中使用和

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

但您不会立即在“应用程序”选项卡中看到新的服务人员,因此我不确定是什么阻碍了新软件的管理,以及它实际上在等待什么

有人知道浏览器通常是如何处理这种情况的吗?

建议为什么应该避免这种情况:

避免更改服务工作者脚本的URL 如果你有 缓存最佳实践,您可以考虑给您的每个版本 服务工作者必须具有唯一的URL。别这样!这通常很糟糕 对于服务人员来说,只需更新当前脚本即可 地点

它会让您遇到如下问题:

  • index.html将sw-v1.js注册为服务工作者
  • sw-v1.js缓存并服务index.html,因此它首先脱机工作
  • 您可以更新index.html,以便它注册新的闪亮的sw-v2.js
  • 如果执行上述操作,用户将永远不会获得sw-v2.js,因为sw-v1.js是 从缓存中为旧版本的index.html提供服务。你把 你自己处于一个需要更新服务人员信息的位置 以更新您的服务人员。嗯

    建议应避免的原因:

    避免更改服务工作者脚本的URL 如果你有 缓存最佳实践,您可以考虑给您的每个版本 服务工作者必须具有唯一的URL。别这样!这通常很糟糕 对于服务人员来说,只需更新当前脚本即可 地点

    它会让您遇到如下问题:

  • index.html将sw-v1.js注册为服务工作者
  • sw-v1.js缓存并服务index.html,因此它首先脱机工作
  • 您可以更新index.html,以便它注册新的闪亮的sw-v2.js
  • 如果执行上述操作,用户将永远不会获得sw-v2.js,因为sw-v1.js是 从缓存中为旧版本的index.html提供服务。你把 你自己处于一个需要更新服务人员信息的位置 以更新您的服务人员。嗯


    本节说sw-v1.js缓存并服务index.html,因此它首先脱机工作。但是我们可以创建一个sw,它对
    index.html
    使用网络优先策略。在这种情况下,我们不会陷入死锁,对吗?而且我仍然希望更好地理解浏览器处理相同和不同名称的服务工作者文件的不同之处。或者更新过程实际上是相同的?使用不同的名称注册软件文件将触发软件更新。在保持相同名称的同时更改软件文件的内容也会触发软件更新。保留相同的名称并更改文件的内容要简单得多,这样您就不必担心
    index.html
    是缓存优先还是网络优先。虽然这可能有些离题,但我认为值得一提的是
    .webmanifest
    (或者
    manifest.json
    文件应该(可能)也不需要版本控制:本节说sw-v1.js缓存并服务index.html,因此它首先脱机工作。但我们可以创建一个sw,它对
    index.html
    使用网络优先策略。在这种情况下,我们不会陷入死锁,对吗?我仍然希望更好地理解浏览器处理se的方式的差异相同和不同名称的服务工作文件。或者更新过程实际上是相同的?使用不同名称注册软件文件将触发软件更新。在保持相同名称的同时更改软件文件的内容也将触发软件更新。只需保持相同名称并更改文件的内容,以及那么你就不必担心
    index.html
    是缓存优先还是网络优先。虽然这可能有些离题,但我认为值得一提的是
    .webmanifest
    (或者
    manifest.json
    文件也不应该(可能)进行版本控制: