Ray*_*Ray 5 javascript reactjs service-worker
我有一个 create-react-app 项目,当有新的生产版本时,我遇到了一个问题,除非清除缓存,或者在访问页面后刷新页面时,否则用户无法获得最新版本。我的 Cloudflare 缓存过期时间设置为 4 小时,但显然用户在此期限后仍然可以获得旧版本。这让我认为这是服务人员的问题。还有其他原因导致这种行为吗?可能的解决方案有哪些?取消注册软件是否是解决此问题的好方法?知道我目前不需要我的应用程序离线运行。如果这是一个好的解决方案,取消注册会有什么后果?我需要在我的index.html 中使用缓存控制标头(即max-age=0)吗?
我知道这有很多问题,但我想展示我正在思考的方向以及我有点困惑的领域。
感谢您提前抽出时间并提供帮助。
小智 3
向 Service Worker 缓存添加版本控制是确保每当有新构建时都会安装新 Service Worker 的方法之一。只需添加一个脚本,该脚本会在每个新构建中增加缓存的版本,这会导致服务工作线程中出现字节差异,这足以让浏览器触发新的安装事件。
在您的 Service Worker 文件中添加类似的内容
const version = 1;
let cacheV = 'foo' + version;
Run Code Online (Sandbox Code Playgroud)
在您的激活事件中添加逻辑,如果版本不匹配,则删除旧缓存。
self.addEventListener("activate", function(event) {
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.map(function(cacheName) {
if (cacheV!== cacheName && cacheName.startsWith("foo")) {
return caches.delete(cacheName);
}
})
);
})
);
});
Run Code Online (Sandbox Code Playgroud)
您还可以向获取侦听器添加更新逻辑,该侦听器将从网络获取最新文件,例如
event.waituntil(update(request));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |