【问题标题】:How often Service Worker refreshes?Service Worker 多久刷新一次?
【发布时间】:2017-05-26 14:24:33
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    根据documentation,默认情况下,除非页面请求本身通过服务工作人员,否则页面的提取不会通过服务工作人员。所以你需要刷新页面才能看到 service worker 的效果。

    这是一个示例,它会在 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,如果您的 service worker 之前已经安装,但是在刷新或页面加载时有新版本的 worker 可用,则新版本已在后台安装,但尚未激活.仅当不再加载任何仍在使用旧服务工作者的页面时才会激活它。一旦不再加载此类页面,新的 service worker 就会激活。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-05-10
        • 2018-08-22
        • 1970-01-01
        • 2020-11-20
        • 2011-03-11
        • 2012-07-10
        • 2014-07-07
        • 1970-01-01
        相关资源
        最近更新 更多