ServiceWorkerRegistration#是否在重复访问时安装值?

问题描述 投票:0回答:1
navigator.serviceWorker.register('/sw.js').then((reg)=>{
            console.log(reg.installing, " installing");  
            console.log(reg.waiting, " waiting"); 
            console.log(reg.active, " active") 
            reg.addEventListener('updatefound', function(){
                console.log("update found", reg.installing); 
            })
})

情况A)假设用户是第一次访问我的网站。 reg.installing打印worker对象。 reg.waitingreg.active未定义,这是可以理解的。 updatefound立即运行,reg.installing与上述工人相同。一切都很好。

案例B)我更新了SW代码并进行了部署。刷新页面时,reg.installing打印未定义。 问题1)为什么未定义?刷新后,将出现新的服务程序,但reg.installing未定义。如果是A,则当浏览器访问该网站时,必须安装新的服务人员,因此reg.installing并非未定义。

[我的假设:在案例B中,我认为then promise block的发生速度快于浏览器将旧的与新的进行比较的速度,因此,发生这种情况时,浏览器根本没有reg.installing。在案例A中,因为这是第一次,浏览器无需进行任何比较,而且速度更快,可以将worker放入reg.installing

问题2)我的假设有意义吗?

javascript service-worker workbox
1个回答
0
投票

强烈建议阅读“ The Service Worker Lifecycle”以获取深入的背景信息。

服务工作者的生命周期独立于客户端页面上的任何活动而发生,并且在您的代码执行时,是的,更新的服务工作者完全有可能从installing状态移至waiting状态(或[ C0],如果您已呼叫active

所以是的,您的假设听起来基本上是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.