PWA-生命周期
本文最后更新于:a few seconds ago
《PWA实战》记录。[以]塔勒·埃特尔 著 张俊达 译
理解service worker作用域
我们如果把serviceworker.js文件放置到根目录中,那么其就可以控制来自站点中任何地方的所有请求。
如果我们把它放置到js目录中,只有源于该子目录
的请求才会通过它。
你可以在注册的时候传一个service worker的时候传入一个scope选项,用来覆盖service worker默认的作用域。
这样可以将它的作用域限制在目录较小的子集。(但是不能扩大作用域)
//这两个具有相同的作用域
navigator.serviceWorker.register(“/sw.js”);
navigator.serviceWorker.register(“/sw.js”,{scope:”/“});
//这两个各自控制了一个不同的目录
navigator.serviceWorker.register(“/sw-login.js”,{scope:”/login”});
navigator.serviceWorker.register(“/sw-regist.js”,{scope:”/regist”});
生命周期
解析成功=> Parsed : 首次注册Service Worker,一般用来判断游览器是否支持Service Worker。
安装=> Installing : 这个状态发生在Service Worker注册之后,一般用
waitUntil
来对一些静态资源进行缓存。
该事件有两个回调方法
event.waitUntil()
: 传入一个Promise参数,该函数会延长事件的存在时间,直到传入的Promise完成。
self.skipWaiting()
: self 是当前context的global变量,执行该方法表示,强制把当前正处在等待(waiting
)状态的Service Worker 进入激活(activate
)状态在install事件中,可以通过waitUntil等待缓存完成,这样确保了在整个链条中如果遇到任何问题,service sorker都不会被安装。
安装后=> Installed/waiting : 一旦Service Worker安装成功,就会进入
installed
状态。
除非另一个激活的Service Worker依然在控制应用,在这种情况下会维持waiting
的状态,等待其他的Service Worker线程关闭。激活=> Activating : 在这个状态下允许 其他 没有被Service Worker控制的客户端,完成worker的安装,并且清除了其他的worker以及关联缓存的旧缓存资源,等待新的Service Worker线程被激活。
该事件有两个回调方法
event.waitUntil()
: 传入一个Promise参数,该函数会延长事件的存在时间,直到传入的Promise完成。
self.clients.claim()
:在 activate 事件回调中执行该方法表示取得页面的控制权, 这样之后打开页面都会使用版本更新的缓存。旧的 Service Worker 脚本不再控制着页面,之后会被停止。激活后( Activated ):在这个状态会处理 activate 事件回调 (提供了更新缓存策略的机会)。并可以处理功能性的事件 fetch (请求)、sync (后台同步)、push (推送)。
废弃状态 ( Redundant ):这个状态表示一个 Service Worker 的生命周期结束。
进入redundant状态的原因可能为这几种:
a. 安装 (install) 失败
b. 激活 (activating) 失败
c. 新版本的 Service Worker 替换了它并成为激活状态
结束🐟
无限枝头好颜色,可怜开不为重阳。——「咏菊」丘浚
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!