服务工作者多久刷新一次?

时间:2017-05-26 14:24:33

标签: reactjs service-worker progressive-web-apps create-react-app

我使用create-react-app创建了一个应用程序,默认情况下它是一个渐进式网络应用程序(加载此file)。

因此,现在每次部署新内容时,应用都无法刷新。在提供缓存内容之前,它多久检查一次新内容?如何选择保存缓存的时间?

2 个答案:

答案 0 :(得分:0)

根据此documentation,默认情况下,除非页面请求本身通过服务工作者,否则页面的提取不会通过服务工作者。因此,您需要刷新页面才能看到服务工作者的效果。

这是一个例子,其中它在3秒后添加狗的图像。

<!DOCTYPE html>
An image will appear here in 3 seconds:
<script>
  navigator.serviceWorker.register('/sw.js')
    .then(reg => console.log('SW registered!', reg))
    .catch(err => console.log('Boo!', err));

  setTimeout(() => {
    const img = new Image();
    img.src = '/dog.svg';
    document.body.appendChild(img);
  }, 3000);
</script>

此外,根据此Updating your service worker,如果先前已安装了服务工作者,但是在刷新或页面加载时可以使用新版本的工作程序,则新版本将在后台安装,但不会但已激活。只有在不再加载任何仍在使用旧服务工作者的页面时,才会激活它。只要仍然没有加载此类页面,新服务工作程序就会激活。

答案 1 :(得分:0)

我不知道您的服务工作者代码的详细信息......但是 您预先缓存的资产(通常在安装事件中),除非您清除它们。 其他URL将通过fetch事件处理程序(如果没有附加处理程序,则直接转到网络)。 在更新服务工作者之前,更新预缓存的逻辑不会更新。安装和激活事件仅针对每个版本的服务工作程序触发一次,因此每个版本只触发1次。 因此,您可以更改默认的预先缓存资产(URL)并更改缓存逻辑,或者将预先缓存的文件抽象到配置源并动态更新这些资产。 由于我不知道你的应用程序的目标是什么,因此很难为你提供问题的实际答案。