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