Javascript 如何使用service worker识别服务器上的更新?

Javascript 如何使用service worker识别服务器上的更新?,javascript,web,service-worker,progressive-web-apps,Javascript,Web,Service Worker,Progressive Web Apps,是否可以识别服务器上的更新,即页面(HTML)或样式(CSS)上有更新,并向服务器发出请求以获取更新的数据?如果是这样的话,怎么做?看看如何动态更新css。 我相信他们使用的解决方案是向css或html页面添加一个带有时间戳的get参数:/css/style.css?time=1234,并计算结果的哈希值。如果自上次验证以来哈希发生了更改,请更新CSS,否则,请继续查找 可以从HTML构建类似的实现,但我还没有看到任何类似的项目。如果您想自动更新页面中的数据,应该看看Ajax 当您的servic

是否可以识别服务器上的更新,即页面(HTML)或样式(CSS)上有更新,并向服务器发出请求以获取更新的数据?如果是这样的话,怎么做?

看看如何动态更新css。
我相信他们使用的解决方案是向css或html页面添加一个带有时间戳的get参数:
/css/style.css?time=1234
,并计算结果的哈希值。如果自上次验证以来哈希发生了更改,请更新CSS,否则,请继续查找


可以从HTML构建类似的实现,但我还没有看到任何类似的项目。如果您想自动更新页面中的数据,应该看看Ajax

  • 当您的service worker脚本发生更改时,它将设置为在用户使用您的PWA联机后立即替换用户的旧脚本
  • 您应该反映对软件中项目阵列的更改
  • 您应该更改缓存的名称,并删除旧缓存
  • 因此,您的用户将始终拥有最新版本的应用程序
  • 详细说明

    1)更改软件以替换当前用户拥有的软件。

    即使是软件中最轻微的更改也足以将其视为新版本,因此它将取代旧版本。这段引语解释了这一点

    更新您的服务人员JavaScript文件。当用户导航到 在您的站点上,浏览器尝试重新下载 在后台定义了服务工作者。如果还有 service worker文件中的字节与它的 目前有,它认为这是新的

    最佳实践是在软件中的任何位置保留一个版本号,并在内容更改时以编程方式进行更新。它甚至可以被引用,没关系,它仍然有效。记住:即使是一个字节的差异也足够了

    2)反映您对要缓存的项目列表所做的更改。

    您在软件中保留要缓存的资产列表。因此,将添加/更新/删除的资产反映到您的列表中。最佳实践是针对您的资产。这是因为SW位于浏览器缓存后面的一层

    换句话说:从SW获取请求通过浏览器缓存。所以软件将从浏览器缓存而不是服务器中选择新资产,并缓存这些资产,直到软件再次更改

    在这种情况下,您将有一半的用户使用您的PWA,并获得新的资产,而另一半用户则遭受令人难以置信的bug。你会有一段美好的时光,过度暴露于抱怨和沮丧之中,因为你无法找到原因或方法重现这些抱怨

    3)替换旧缓存,不要将其合并。

    如果不更改更新资产列表的缓存名称,则这些资产将与旧资产合并

    合并将以一种方式进行,即旧的和删除的资产将被保留,而新的添加和更改的资产将被替换。虽然这样看来一切正常,但您将在用户设备上积累旧资产

    4)每个人都很快乐

    实施和跟踪所有提到的事情可能看起来很乏味,但我向您保证,否则您将开始处理更大、更不愉快的事情。而不满意的用户将是一个不错的加号


    因此,我鼓励您一次性设计软件。

    是的,可以通过使服务工作者中的缓存失效:

    还请注意,目前存在一个打开的和作为服务工作者的文件,可能由于浏览器缓存而无法更新


    但是,您可能还想看看这对您来说是什么(例如通过一个吞咽任务)

    我需要重新加载页面以获得更改吗?还是会自动发生?@Sravan很抱歉没有及时回复。我仍然会提供一个答案供进一步参考。简短的回答是肯定的,您确实需要刷新以获得更改。在这里可以找到详细的答案:@Sravan&@Umur,刷新是不够的:“刷新页面不足以让新版本接管”。要获取更新,请使用当前服务人员关闭或导航所有选项卡