我正在尝试为一个简单但古老的Django Web应用程序安装ServiceWorker。我开始使用Chrome团队的读取缓存示例进行工作。
这很有效,但并不理想,因为我想在需要时更新缓存。根据阅读所有其他服务工作者答案,有两种推荐的方法可以做到这一点。
我想尝试Jake Archibald在他的离线食谱中建议的“使用缓存,但从网络更新缓存”的方法,但我无法使它正常工作。我的最初想法是,在服务工作者中返回缓存版本,但若有网络可用则排队一个更新缓存的函数。例如,在fetch事件监听器中实现如下:
这很有效,但并不理想,因为我想在需要时更新缓存。根据阅读所有其他服务工作者答案,有两种推荐的方法可以做到这一点。
使用一些服务器端逻辑来知道您显示的内容何时更新,然后更新您的服务工作者以更改预缓存内容。例如,这就是sw-precache所做的。
只需在服务工作者JS文件中更新缓存版本(请参见上面缓存示例中的JS文件中的注释),每当您依赖的资源更新时。
我想尝试Jake Archibald在他的离线食谱中建议的“使用缓存,但从网络更新缓存”的方法,但我无法使它正常工作。我的最初想法是,在服务工作者中返回缓存版本,但若有网络可用则排队一个更新缓存的函数。例如,在fetch事件监听器中实现如下:
// If there is an entry in cache, return it after queueing an update
console.log(' Found response in cache:', response);
setTimeout(function(request, cache){
fetch(request).then(function(response){
if (response.status < 400 && response.type == 'basic') {
console.log("putting a new response into cache");
cache.put(request, response);
}
})
},10, request.clone(), cache);
return response;
但是这样做不起作用。页面卡在加载中。
上面的代码有什么问题?如何才能达到我的目标设计?