Joh*_*ika 7 caching offline-caching service-worker progressive-web-apps workbox
我使用Workbox预先缓存呈现应用程序shell所需的资产,包括基本版本index.html.Workbox假定index.html在缓存中可用,否则,页面导航失败,因为我在我的服务工作者中注册了这个:
workbox.routing.registerNavigationRoute('/index.html');
Run Code Online (Sandbox Code Playgroud)
我也在self.skipWaiting()安装监听器中有指令:
self.addEventListener('install', e => {
self.skipWaiting();
});
Run Code Online (Sandbox Code Playgroud)
据我了解,现在有2个install听众:
self.skipWaiting()Workbox的安装监听器失败时是否可以成功?这将导致一个问题状态,即资产未预先缓存但服务工作者已激活.这种情况是否可能,我应该保护它吗?
Jef*_*ick 16
我强烈推荐" 服务工作者生命周期 "作为服务工作者安装和更新的不同阶段的权威信息来源.
总结一下该文章中的一些信息,因为它适用于您的问题:
服务工作者首先进入installing阶段,然而install您注册的许多听众都将有机会执行.正如您所建议的那样,Workbox会创建自己的install侦听器来处理预缓存.
只有当每个install监听器完成且没有错误时,服务工作者才会进入下一个阶段,这可能是waiting(如果已经有一个使用以前版本的服务工作者的开放客户端)或者activating(如果没有客户端使用以前的版本)服务人员).
skipWaiting(),如果您选择使用它,waiting无论是否有使用以前版本的服务工作者的任何打开的客户端,都将绕过该阶段.
skipWaiting()如果任何install听众失败,呼叫将无法完成任何事情,因为服务工作者永远不会离开installing阶段.它基本上是一个无操作.
您应该注意的一件事是skipWaiting()在使用延迟加载版本化的预先缓存资产时使用.正如文章警告的那样:
警告:
skipWaiting()表示您的新服务工作者可能正在控制使用旧版本加载的页面.这意味着您的旧服务工作人员将处理您的某些页面提取,但您的新服务工作人员将处理后续提取.如果这可能会破坏事情,请不要使用skipWaiting().
由于延迟加载延迟,版本化资产在2018年更常见,因此skipWaiting()默认情况下Workbox不会为您调用.您可以选择使用它.
| 归档时间: |
|
| 查看次数: |
3976 次 |
| 最近记录: |