Service Worker 是否有可能永久破坏网站?

Is it possible for a service worker to permanently break a website?

假设您 service worker 实现了 'offline first' 策略(服务工作者的典型用例),并将其部署到生产环境中,但它有一个错误。该错误意味着它从未真正检查过原始服务器是否有更新,甚至对它自己也是如此。因此,在 service worker 在第一次访问时为给定客户端注册后,该客户端将再也看不到该网站的任何更新(除非用户使用 chrome://serviceworker-internals/ 或其他方式手动取消注册 service worker)。换句话说,对于这些用户来说,该站点将永远崩溃。

上述情况是否可能?如果是这样,是否有确保它永远不会发生的策略?

哈哈,不,不是这样的,service-worker 文件在 24 小时内定期更新,即使第一个 service-worker 有问题,它也会一直检查服务器是否有任何变化,更新。

mdn


TL;DR

不会永久中断,您可以随时更新您的服务人员并修复您造成的缓存问题。

但是如果您忘记更新缓存并正确使用它,则有可能永远不会更新某些内容。 (关于第一点,你总是可以解决这个问题,没有永久中断)


长答案

据我所知,当您过于依赖缓存时,会出现一些不好的情况,但是这取决于策略,不太可能发生在“线下优先”战略,但其他战略。

如果你对 Service Worker 有深入的了解,你就会知道我们可以为浏览器的某些请求做一些网络平衡。对于排序,我们可以这样做:

离线优先

在线优先

最快

仅限在线

仅离线

等.. (名称仅供参考)

如果您要为某些 files/places 使用 仅离线 之类的东西,您可能会得到 places/files 永远不会更新的结果。

所以答案是:总是有可能出现问题,但对于您担心的事情,它可能不会总是发生。如果你想阻止它确保总是在可用时首先更新离线缓存内容


@anshulix 的答案加起来我不确定该行为是否来自旧服务人员。但是对于我最近的实验,无论你在做什么,如果服务工作者一旦安装,它总是会在你每次加载网站时尝试更新一次。

有了这个,您始终可以立即修复错误,最终用户将在第一个站点加载或第二个站点加载后得到修复。