【发布时间】:2016-02-09 00:19:11
【问题描述】:
我正在尝试为一个简单但旧的 Django Web 应用程序安装一个 ServiceWorker。我开始使用示例read-through caching example from the Chrome team
这很好用,但并不理想,因为如果需要,我想更新缓存。根据阅读此处所有其他服务人员的答案,有两种推荐的方法来做到这一点。
使用一些服务器端逻辑来了解您显示的内容何时更新,然后更新您的服务工作者以更改预缓存的内容。例如,这就是 sw-precache 所做的。
只要您依赖更新的资源,只需更新 Service Worker JS 文件中的缓存版本(请参阅上面缓存示例中 JS 文件中的 cmets)。
对我来说都不是很好的解决方案。首先,这是一个愚蠢的遗留应用程序。我没有 sw-precache 依赖的应用程序堆栈。其次,其他人更新将要显示的数据(它基本上是带有详细信息页面的事物列表)。
我想尝试一下 Jake Archibald 在他的 offline cookbook 中建议的“使用缓存,但从网络更新缓存”,但我无法让它发挥作用。
我最初的想法是我应该能够在我的 service worker 中返回缓存的版本,但是如果网络可用,我会排队一个更新缓存的函数。例如,在 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;
但这不起作用。页面卡住加载。
上面的代码有什么问题?实现目标设计的正确方法是什么?
【问题讨论】:
标签: service-worker