服务人员可以在其生命周期中处于三种状态。
第一个状态是安装状态,表示服务工作者完成安装时的状态。
第三个状态是活动状态,这意味着服务工作者现在可以干预来自服务工作者范围内的加载页面的请求。
还有一个称为等待状态的状态,这意味着服务工人已安装但正在等待,因为当前还有其他一些服务工人处于活动状态。
我看过的大多数地方都有这样的解释:“新服务人员正在等待,因为要确保在给定的时间仅运行一个版本的网站”。解释听起来很简单,但实际上我没有弄清楚原因,“一次只提供1个版本”是什么意思。
如果有人可以用简单的方式解释问题,那将非常有帮助。
答案 0 :(得分:0)
这个问题也经常使我感到困惑,所以我将尝试弥补一些例子,并希望为我们两个人澄清。
假设您的网站版本为1,服务人员为版本1:
然后将服务工作者更新为v2:
如果安装了v1 SW的用户现在访问该站点,并且将v2服务工作器设置为立即激活,则会出现种族:
因此,如果这不仅仅是动物图片,那么您的网站可能会因某些时间而中断。
That example来自杰克·阿奇博尔德(Jake Archibald)(可能是我杀了它),他在那里链接了一个演示应用程序,但我认为本文本身并没有具体说明风险。但想法是
“ skipWaiting()意味着您的新服务人员可能 控制加载了旧版本的页面。这表示 页面的某些提取操作将由您的旧服务处理 工作人员,但您的新服务人员将随后处理 获取。”
其中的skipWaiting与立即激活相同。要继续进行后续页面加载的想法...
再次假设您拥有网站的版本1和版本1的服务人员:
但是随后您决定只对页面本身进行模板化,因为这对于不支持Service Worker的浏览器更有意义。您实现站点的版本2和服务工作者的版本2:
现在,如果用户在发布v2后刷新了他们的应用程序(假设他们在v1期间访问过):
如果现在激活了v2服务工作者,他们将拥有一个v1 index.html页面,该页面期望来自请求的模板HTML,但是您的新v2服务工作者将返回JSON。
我在这里可能是错的,因此我愿意接受其他建议,但我认为我会对此持怀疑态度。希望有帮助吗?