【发布时间】:2017-05-26 14:24:33
【问题描述】:
我使用create-react-app 创建了一个应用程序,默认情况下它是一个渐进式网络应用程序(它会加载这个file)。
因此,现在每次我部署新内容时,应用程序都不会刷新。它在提供缓存内容之前多久检查一次新内容?如何选择保存缓存的时间?
【问题讨论】:
标签: reactjs service-worker progressive-web-apps create-react-app
我使用create-react-app 创建了一个应用程序,默认情况下它是一个渐进式网络应用程序(它会加载这个file)。
因此,现在每次我部署新内容时,应用程序都不会刷新。它在提供缓存内容之前多久检查一次新内容?如何选择保存缓存的时间?
【问题讨论】:
标签: reactjs service-worker progressive-web-apps create-react-app
根据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 就会激活。
【讨论】:
我不知道您的服务人员代码的详细信息...但是 您预先缓存的资产(通常在安装事件中)在那里,除非您清除它们。 其他 URL 将通过 fetch 事件处理程序(如果您没有附加处理程序,则直接进入网络)。 在您更新服务工作者之前,您更新预缓存的逻辑不会更新。 install 和 activate 事件只会为每个版本的 Service Worker 触发一次,因此每个版本只会触发 1 次。 因此,您可以更改默认的预缓存资产 (url) 并更改缓存逻辑,或者将预缓存的文件抽象到配置源并动态更新这些资产。 很难为您的问题提供实际答案,因为我不知道您的应用程序的目标是什么。
【讨论】: