网站搜索

javascript - 服务工作者有可能永久破坏网站吗?


想象一下,你制作了一个实现“离线优先”策略的服务工作者(这是服务工作者的典型使用场景),并且你将它部署到了生产环境,但它存在一个 bug。这个 bug 导致它实际上从不向源服务器检查更新,甚至连自身也不例外。因此,在给定客户端第一次访问时注册了该服务工作者后,该客户端将再也看不到该网站的任何更新(除非用户手动使用 chrome://serviceworker-internals/ 之类的方式注销服务工作者)。换句话说,对于这些用户来说,网站将永远坏掉。

上述情况可能发生吗?如果可能,有没有一种策略可以确保它永远不会发生?

答案#1


摘要

不会有永久性故障,你总是可以更新你的服务工作者并修复你造成的缓存问题。

但是,如果你忘记更新缓存并正确使用它,某些内容可能永远不会被更新。(关于第一点,你总是可以修复它,不会永久损坏)


长答案

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

好像你对 Service Worker 有预先的了解,你就会知道我们可以为浏览器的某些请求做某种网络平衡。简而言之,我们可以做类似这样的事情:

离线优先

在线优先

最快

仅限在线

仅限离线

等等..(这些名字仅用于说明)

如果你选择对某些文件/位置采用类似仅离线的方式,这些位置/文件可能永远不会更新。

所以答案是:总是有可能出错,但对于你担心的事情,它不太可能总是发生。如果你想预防它,请确保在离线可用时总是首先更新缓存内容。


为了补充 @anshulix 的答案,我不确定这种行为是否来自旧的 service worker。但根据我最近的实验,无论你在做什么,只要 service worker 一旦安装,它每次加载网站时都会尝试更新自己一次。

有了这个,你可以随时立即修复你的错误,最终用户将在第一次或第二次加载网站后获得修复。

答案#2

哈哈,不,事情不是这样的,service-worker 文件每 24 小时会周期性更新,即使第一个 service-worker 有问题,它也会始终检查服务器是否有任何更改并进行更新。

MDN