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