除非我删除 cookie/cache,否则更改不会反映在服务人员中
changes not reflecting in service-worker unless I delete cookie/cache
我正在使用 service worker 来实现网络推送通知。每当我更改 service-worker 的某些代码时,除非我删除 cookie/cache,否则该更改不会反映在浏览器的 service-worker 中。
这是正常行为还是我必须添加一些功能来更新服务工作者?
如果缓存 header 与服务工作者文件一起发送,服务工作者文件最多缓存 24 小时。
第一步是将缓存 headers 设置为 0 以不缓存。
当浏览器发现新的 Service Worker 时,它会下载并安装它。直到当前由 service worker 控制的所有页面关闭后才会生效。对于普通用户来说,这不是问题。在 chrome 的开发过程中,您可以使用 Ctrl+ shift + R 进行硬刷新,强制页面不受 service worker 控制,让您的 be service worker 控制下一次刷新。
最后一个选项是在安装步骤中使用跳过等待并在激活步骤中声明以强制新服务人员立即激活和控制任何页面。如果靠这个赚钱,因为很容易进入奇怪的场景。
更新: 浏览器正在更改此默认行为 - Firefox 现在将忽略缓存 header 并且其他浏览器可能会实现相同的行为
回答您的具体问题:是的,该行为是故意的,是的,您可以调用更新功能。在服务工作者注册上使用 update()
方法。来自 MDN:
The update method of the ServiceWorkerRegistration interface attempts to update the service worker. It fetches the worker's script URL, and if the new worker is not byte-by-byte identical to the current worker, it installs the new worker. The fetch of the worker bypasses any browser caches if the previous fetch occurred over 24 hours ago.
请注意,如果前一次提取早于 24 小时,SW 提取将绕过任何浏览器缓存,因此您应该在开发服务工作者时禁用缓存。
我正在使用 service worker 来实现网络推送通知。每当我更改 service-worker 的某些代码时,除非我删除 cookie/cache,否则该更改不会反映在浏览器的 service-worker 中。 这是正常行为还是我必须添加一些功能来更新服务工作者?
如果缓存 header 与服务工作者文件一起发送,服务工作者文件最多缓存 24 小时。
第一步是将缓存 headers 设置为 0 以不缓存。
当浏览器发现新的 Service Worker 时,它会下载并安装它。直到当前由 service worker 控制的所有页面关闭后才会生效。对于普通用户来说,这不是问题。在 chrome 的开发过程中,您可以使用 Ctrl+ shift + R 进行硬刷新,强制页面不受 service worker 控制,让您的 be service worker 控制下一次刷新。
最后一个选项是在安装步骤中使用跳过等待并在激活步骤中声明以强制新服务人员立即激活和控制任何页面。如果靠这个赚钱,因为很容易进入奇怪的场景。
更新: 浏览器正在更改此默认行为 - Firefox 现在将忽略缓存 header 并且其他浏览器可能会实现相同的行为
回答您的具体问题:是的,该行为是故意的,是的,您可以调用更新功能。在服务工作者注册上使用 update()
方法。来自 MDN:
The update method of the ServiceWorkerRegistration interface attempts to update the service worker. It fetches the worker's script URL, and if the new worker is not byte-by-byte identical to the current worker, it installs the new worker. The fetch of the worker bypasses any browser caches if the previous fetch occurred over 24 hours ago.
请注意,如果前一次提取早于 24 小时,SW 提取将绕过任何浏览器缓存,因此您应该在开发服务工作者时禁用缓存。