假设您在更新 PWA 期间,网络中断并且刷新缓存失败。这会让应用程序处于什么状态?刷新时是否会更新某些应用程序文件而其他则不会?当连接返回时,它会重试吗?多常?多少次?
1 回答
这取决于 service worker 是如何实现的。
我推荐的一种常见模型是在事件期间负责添加到缓存中install
,并在事件期间负责从缓存中删除activate
。
如果缓存添加包含event.waitUntil()
在install
事件中,并且其中一个添加引发异常(由于网络故障或其他问题),则新(或更新)服务工作者的安装将被视为失败。之前版本的 service worker,如果有的话,会继续使用。下一次导航到服务工作者范围内的页面时,install
将针对新服务工作者触发一个新事件,并为其提供另一个执行缓存添加的机会。
如果您只在事件中清理缓存activate
,那么您不必担心安装失败时会删除先前缓存的条目,因为除非过程成功activate
,否则不会触发事件。install
(您的 service worker 可能最终waiting
处于介于两者之间的状态install
并被activate
解雇,这取决于是否使用旧版本的 service worker 打开了其他选项卡,以及您是否调用self.skipWaiting()
.)
在https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#updates上有更多信息、示例代码和图表