当前位置: 首页 > 知识库问答 >
问题:

如何强制服务工作者更新?

燕经国
2023-03-14

我使用sw-precache生成Polymer-CLI构建过程中的服务工作,因此它旨在更新更新文件的散列,以表示需要更新缓存。但是缓存中没有替换我更新的内容,因此如果我使用ctrl-r刷新,它将获得旧版本,但如果使用ctrl-shift-r刷新,它将获得新版本。原因可能是我的服务人员没有更新。

这份文件说

如果与当前相比,服务辅助程序文件中甚至有一个字节的差异,它就认为它是新的。

,但如果我的新服务人员一个字节都没有更改呢?(如果只更改了一个哈希,则会发生这种情况)。如何配置软件预缓存以在每次新请求时更新服务工作?

共有3个答案

茹正祥
2023-03-14

如果一个文件的散列发生更改,就足以确保由sw precache生成的服务人员JavaScript文件发生更改。这反过来足以触发服务工作者更新流。

如果在测试过程中没有看到触发的更新流,则可能是由于服务工作者JavaScript文件提供了HTTP缓存头,导致该文件从浏览器缓存而不是从网络中获取。

看见https://stackoverflow.com/a/38854905/385997讨论HTTP缓存头是如何发挥作用的,以及与此相关的最佳实践。

闻人博
2023-03-14

正如前面的答案所述,浏览器有一个1天(24小时)的内置限制来查找对服务工作者的更新,但是你需要注意的是,你仍然需要在你的代码上调用。更新()对象,否则将使用文件的原始版本。

测试Chrome中的更改时,我总是右键单击刷新按钮,并在处理我的service worker脚本时选择“空缓存和硬重置”(当开发人员工具打开时,选项可用)。

颜畅
2023-03-14

“sw precache”已被Workbox取代,Workbox为您要预缓存的文件生成哈希,并将这些哈希添加到您的服务人员的源代码中(我不知道sw precache是否以同样的方式工作,Jeff的回答建议是这样的)。如果您想要预先缓存更改的任何文件--并且您重新运行构建--服务工作者中更新的哈希值将被更新,这几乎保证了服务工作者将“至少有一个字节不同”。

当您重新加载(ctrl-r)或重新访问您的应用程序时,浏览器将再次获取已注册的Service Worker。而且,如果该服务辅助角色发生了变化,它将被“排队”来管理应用。但它不会开始管理应用程序,直到您关闭打开应用程序的所有选项卡,然后打开一个新的选项卡。

当您硬刷新(shift-ctrl-r)时,它总是在没有控制器的情况下加载,这与使用新的服务人员不同。

为了在开发过程中进行测试,我在开发工具中使用跳过等待,让新的服务工作者替换旧的,而不需要等待我关闭所有选项卡。

 类似资料:
  • 我使用带有sw工具箱库的service worker。我的PWA缓存除API查询(图像、css、js、html)之外的所有内容。但是如果有一天某些文件会被更改呢。或者如果服务人员。js将被更改。应用程序应该如何知道文件中的更改? 我的服务人员。js: 我不知道在PWA中更新缓存的常用方法是什么。也许PWA应该在后台发送AJAX请求并检查UI版本?

  • 问题内容: 从我的根目录删除后,Chrome仍然运行我从Webroot中删除的服务工作者。如何从我的网站和Chrome卸载服务工作者,以便可以重新登录我的网站? 我已将问题归结为ServiceWork的缓存机制,我只想暂时将其删除,直到有时间对其进行调试为止。我正在使用的登录脚本将重定向到Google的服务器,以便他们登录其Google帐户。但是,我从login.php页面获得的只是一条消息。 问

  • 从根目录中删除后,Chrome仍然运行我从webroot中删除的服务工作者。我如何从我的网站和Chrome卸载服务工作者,以便我可以重新登录到我的网站? 我已经将问题追溯到Service Work的缓存机制,我现在只想删除它,直到我有时间调试它。我正在使用的登录脚本重定向到谷歌的服务器,以便他们登录到他们的谷歌帐户。但是我从login.php页面得到的只是一条消息。

  • 服务人员可能会干扰刷新按钮(按设计)。在桌面Chrome上,您可以按住shift键并单击刷新按钮进行硬重新加载,忽略任何已安装的ServiceWorker。 有没有一种方法可以忽略JavaScript中的SW强制重新加载? (我想要这个,这样我就可以给移动用户一个按钮,如果SW开始行为不端。手机没有移位键。)

  • 我有一个基于service worker的离线应用程序,允许用户离线下载pdf文件。 有一个文本文件,其中包含pdf文件的下载路径和特定格式的文件标题(以及css、js和图像路径),应用程序通过ajax读取此文本文件并绘制所有可用pdf文件的列表(通过显示标题和下载链接) 在安装过程中,工作人员读取相同的文件,并将所有pdf文件与文本文件一起放入缓存中,以便这些文件可以离线访问。 当我用一些新的p

  • 我试图安装一个简单的ServiceWorker,但旧的,Django Web应用程序。我开始使用Chrome团队的示例读取缓存示例 这很好,但并不理想,因为如果需要,我想更新缓存。根据阅读此处所有其他服务人员的答案,有两种推荐方法。 > 使用一些服务器端逻辑来知道您显示的内容何时更新,然后更新您的服务辅助角色以更改所述内容。例如,这就是sw-preache所做的。 只要在需要更新资源时更新serv