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

标签 javascript service-worker

假设您制作 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/

相关文章:

javascript - 如何使用 jQuery 在不同时间淡入图像

javascript - 循环访问多个选择字段选项值

php - 如何将字符串传递给包含特殊字符的javascript函数

Angular ServiceWorker 在启用输出散列的情况下返回响应 404 Not Found

java - 请求被拒绝,因为没有找到多部分边界

angularjs - Angular Dart 与 polymer 和 Service Worker 不兼容

reactjs - 更改 index.html 时强制更新已安装的 PWA(防止缓存)

reactjs - Service Worker skipWaiting 无法激活当前等待的软件

Angular PWA 在没有 WorkBox 的情况下添加后台同步

javascript - 如何获取正在运行 React 应用程序的当前域名