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

时间:2019-01-11 10:51:31

标签: service-worker browser-cache

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

您应该在服务工作者文件的响应标头中使用no-cache directivemax-age field

但是,由于我没有找到有关此方法的专用声明,因此我尝试了一下,似乎如果更改Service Worker文件,则很难摆脱旧文件。因此,我可以在dev-tools的 sources 标签中看到这两个文件。

Sources: two SW files

但是您不会立即在 application 选项卡中看到新的服务工作者,所以我不确定是什么阻碍了新SW的掌控以及它实际上正在等待什么。

New SW (renamed!) awaits installation

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

1 个答案:

答案 0 :(得分:1)

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

  

避免更改您的服务工作者脚本的URL

     

如果您已经read my post   缓存最佳做法,您可以考虑提供每个版本的   服务工作者唯一的URL。不要这样!这通常很糟糕   服务人员的实践,只需更新当前脚本   位置。

     

它可以使您陷入这样的问题:

     
      
  1. index.html将sw-v1.js注册为服务工作者。
  2.   
  3. sw-v1.js缓存并提供index.html,因此它首先离线运行。
  4.   
  5. 您更新index.html,以便它注册新的闪亮的sw-v2.js。
  6.   
     

如果执行上述操作,则用户永远不会获得sw-v2.js,因为sw-v1.js是   从缓存中提供旧版本的index.html。你放了   使自己处于需要更新服务人员的位置   为了更新您的服务人员。真是