Jp_*_*Jp_ 12 html5 offline-caching service-worker progressive-web-apps sw-precache
我正在使用sw-precache通过Polymer CLI构建过程生成我的服务工作,因此它旨在更新更新文件的哈希,以表示需要更新缓存.但是我的更新内容没有在缓存中被替换,所以如果我用ctrl + r刷新它会得到一个旧版本但是如果我用ctrl + shift + r刷新则会得到新版本.原因可能是我的服务工作者没有更新.
该文件指出
如果服务工作文件中的字节差异与其当前的差异,则认为它是新的.
,但是如果我的新服务工作者没有更改字节呢?(如果只有一个哈希发生了变化就会发生).如何配置sw-precache以在每次新请求时更新服务工作?
Jef*_*ick 10
如果一个文件的哈希值发生了变化,那就足以确保通过sw-precache更改生成的服务工作者JavaScript文件.反过来,这足以触发服务工作者更新流程.
如果您在测试时没有看到触发的更新流,那么可能是由于服务工作者JavaScript文件与HTTP缓存头一起提供,导致它从浏览器的缓存而不是从网络中获取.
有关HTTP缓存标头如何发挥作用的讨论,请参阅/sf/answers/2719843381/,以及与此相关的最佳实践.
Bit*_*jug 10
“ sw-precache”已由Workbox取代,Workbox会为要预缓存的文件生成哈希,并将这些哈希添加到服务工作者的源代码中(我不知道是否sw-precache以相同的方式工作,Jeff的回答表明确实如此)。如果您要预缓存的任何文件发生更改(然后重新运行构建),则将更新服务工作者中的更新哈希,这几乎可以保证服务工作者将“至少相差一个字节”。
当您重新加载(ctrl-r)或重新访问应用程序时,浏览器将再次获取为其注册的服务工作者。而且,如果该服务人员已更改,将“排队”以管理该应用程序。但是,只有在打开应用程序并关闭所有选项卡,然后再打开一个新选项卡后,它才能开始管理该应用程序。
硬刷新(shift-ctrl-r)时,它将始终在没有控制器的情况下加载,这与使用新的服务工作者不同。
为了进行开发期间的测试,我在devtools中使用了跳过等待,以使新的服务工作者替换旧的服务工作者,而无需等待我关闭所有选项卡。
正如之前的答案所述,浏览器有一天(24小时)的内置限制来查找服务工作者的更新,但您需要注意的是,您仍然需要调用.update()您的ServiceWorkerRegistration对象,否则原始将使用该文件的版本.
在测试Chrome中的更改时,我总是右键单击刷新按钮,并在处理我的服务工作者脚本时选择"清空缓存和硬重置"(当开发人员工具打开时可用选项).
| 归档时间: |
|
| 查看次数: |
22272 次 |
| 最近记录: |