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 有问题,它也会一直检查服务器是否有任何变化,更新。
TL;DR
不会永久中断,您可以随时更新您的服务人员并修复您造成的缓存问题。
但是如果您忘记更新缓存并正确使用它,则有可能永远不会更新某些内容。 (关于第一点,你总是可以解决这个问题,没有永久中断)
长答案
据我所知,当您过于依赖缓存时,会出现一些不好的情况,但是这取决于策略,不太可能发生在“线下优先”战略,但其他战略。
如果你对 Service Worker 有深入的了解,你就会知道我们可以为浏览器的某些请求做一些网络平衡。对于排序,我们可以这样做:
离线优先
在线优先
最快
仅限在线
仅离线
等..
(名称仅供参考)
如果您要为某些 files/places 使用 仅离线 之类的东西,您可能会得到 places/files 永远不会更新的结果。
所以答案是:总是有可能出现问题,但对于您担心的事情,它可能不会总是发生。如果你想阻止它确保总是在可用时首先更新离线缓存内容
将 @anshulix 的答案加起来我不确定该行为是否来自旧服务人员。但是对于我最近的实验,无论你在做什么,如果服务工作者一旦安装,它总是会在你每次加载网站时尝试更新一次。
有了这个,您始终可以立即修复错误,最终用户将在第一个站点加载或第二个站点加载后得到修复。
假设您 service worker 实现了 'offline first' 策略(服务工作者的典型用例),并将其部署到生产环境中,但它有一个错误。该错误意味着它从未真正检查过原始服务器是否有更新,甚至对它自己也是如此。因此,在 service worker 在第一次访问时为给定客户端注册后,该客户端将再也看不到该网站的任何更新(除非用户使用 chrome://serviceworker-internals/
或其他方式手动取消注册 service worker)。换句话说,对于这些用户来说,该站点将永远崩溃。
上述情况是否可能?如果是这样,是否有确保它永远不会发生的策略?
哈哈,不,不是这样的,service-worker 文件在 24 小时内定期更新,即使第一个 service-worker 有问题,它也会一直检查服务器是否有任何变化,更新。
TL;DR
不会永久中断,您可以随时更新您的服务人员并修复您造成的缓存问题。
但是如果您忘记更新缓存并正确使用它,则有可能永远不会更新某些内容。 (关于第一点,你总是可以解决这个问题,没有永久中断)
长答案
据我所知,当您过于依赖缓存时,会出现一些不好的情况,但是这取决于策略,不太可能发生在“线下优先”战略,但其他战略。
如果你对 Service Worker 有深入的了解,你就会知道我们可以为浏览器的某些请求做一些网络平衡。对于排序,我们可以这样做:
离线优先
在线优先
最快
仅限在线
仅离线
等.. (名称仅供参考)
如果您要为某些 files/places 使用 仅离线 之类的东西,您可能会得到 places/files 永远不会更新的结果。
所以答案是:总是有可能出现问题,但对于您担心的事情,它可能不会总是发生。如果你想阻止它确保总是在可用时首先更新离线缓存内容
将 @anshulix 的答案加起来我不确定该行为是否来自旧服务人员。但是对于我最近的实验,无论你在做什么,如果服务工作者一旦安装,它总是会在你每次加载网站时尝试更新一次。
有了这个,您始终可以立即修复错误,最终用户将在第一个站点加载或第二个站点加载后得到修复。