我使用create-react-app
创建了一个应用程序,默认情况下它是一个渐进式网络应用程序(加载此file)。
因此,现在每次部署新内容时,应用都无法刷新。在提供缓存内容之前,它多久检查一次新内容?如何选择保存缓存的时间?
答案 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)并更改缓存逻辑,或者将预先缓存的文件抽象到配置源并动态更新这些资产。 由于我不知道你的应用程序的目标是什么,因此很难为你提供问题的实际答案。