如何缓存签名文件(服务工作者)

时间:2018-05-30 20:22:24

标签: javascript service-worker

多个前端应用程序在文件中实现签名模板以控制缓存,以及签名更改的文件中的每个更改。 如何让Service Worker处理这些签名和缓存?

签名示例:

  • sw-d58e3582afa99040e27b92b13c8f2280.js
  • sw.js?_gc = 20180101

我正在开发一个已经准备好的应用程序,尝试实现服务工作者以使某些功能可以脱机使用。

示例,在本节中我需要说明我将要缓存的内容,但是,应用程序会更改文件的签名以控制缓存。 (今天是这样的)

caches.open('my-cache').then(function(cache) {
return cache.addAll([
    '/index.html',
    '/styles.css',
    '/main.js'
]);})

应用程序总是将“styles.css”更改为“styles.css?V = 1527624807103_1”(时间戳)据我所知,“styles.css”与“styles.css”不同?V = 1527624807103_1 ”

1 个答案:

答案 0 :(得分:0)

您不应对用于实际顶级服务工作文件的URL进行版本控制或添加signture参数。如“The Service Worker Lifecycle”中所述:

  

它会让你遇到这样的问题:

     
      
  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。   你已经把自己置于需要更新你的位置   服务工作者,以便更新您的服务人员。

对于服务工作者文件中包含的实际URL(可能合法地包含版本/散列/签名),最好的办法是使用与构建过程集成的工具,并生成基于URL的列表在每个应该预先缓存的文件的最新版本上。

Workbox就是这样一个工具,还有其他工具,例如sw-precache(Workbox的前身)和offline-plugin