Javascript 服务人员是否可能永久破坏网站?

Javascript 服务人员是否可能永久破坏网站?,javascript,service-worker,Javascript,Service Worker,假设您使其实现“离线优先”策略(服务人员的典型用例),并将其部署到生产中,但它有一个bug。这个bug意味着它从来没有实际检查过源服务器的更新,甚至连它自己也没有。因此,在服务人员第一次访问某个客户时为其注册后,该客户将再也看不到该网站的任何更新(除非用户使用chrome://serviceworker-internals/或其他东西)。换言之,对于这些用户来说,网站将永远被破坏 上述情况是否可能?如果是这样的话,有没有一个策略来确保它永远不会发生?哈哈,没有,它不会以这种方式发生,服务人员文件

假设您使其实现“离线优先”策略(服务人员的典型用例),并将其部署到生产中,但它有一个bug。这个bug意味着它从来没有实际检查过源服务器的更新,甚至连它自己也没有。因此,在服务人员第一次访问某个客户时为其注册后,该客户将再也看不到该网站的任何更新(除非用户使用
chrome://serviceworker-internals/
或其他东西)。换言之,对于这些用户来说,网站将永远被破坏


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

哈哈,没有,它不会以这种方式发生,服务人员文件会在24小时内定期更新,即使第一个服务人员出现错误,它也会在服务器上检查是否有任何更改和更新


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

但是,如果您忘记更新缓存并正确使用它,则可能永远不会更新某些内容。(关于第一点,您始终可以解决此问题,无需中断)


长话短说 据我所知,当您过于依赖使用缓存时,会出现一些不好的情况,但这取决于策略,不太可能发生在“脱机优先”策略上,而是其他策略

如果您对服务人员有深入的了解,您就会知道我们可以对浏览器的某些请求进行某种网络平衡。对于排序,我们可以执行以下操作:

先离线

先在线

最快的

仅在线

仅脱机使用

(名称仅用于插图)

如果您对某些文件/位置使用类似于“仅脱机”
的方法,那么您可能会发现这些位置/文件永远不会更新

所以答案是:总有一些事情出错的可能性,但对于你所担心的事情来说,它不可能总是发生。如果要阻止它请确保在缓存内容可用时始终首先更新脱机缓存内容


把anshulix的答案加起来,我不确定这种行为是否来自老服务人员。但在我最近的实验中,无论您在做什么,如果service worker一旦安装,它将始终尝试在每次加载站点时更新自己一次


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

很有趣,但您的意思是,此更新不需要加载站点来触发它吗?如果用户不再访问该站点,则无所谓。然而,一旦用户点击URL,下一个服务人员就会进入等待队列。因此,这并不意味着24小时定期更新,而是当用户再次访问站点时。不,有时间限制的更新意味着,即使您现有的服务人员没有变化,它也会更新。至于我最近的经验,此更新不需要24小时。每次加载站点时,服务人员都会尝试更新自身,无论服务人员是否已更改。--换句话说,24小时内没有定期更新。相反,当用户试图加载站点时,总是会发生这种情况。