我正在尝试cache-then-network
在服务工作者中实施一种策略,该策略在后台更新缓存。我想避免不必要fetch
的请求,所以想出了以下解决方案 -
function cache_then_network(event) {
var updated = false;
event.respondWith(
caches.open(staticCacheName)
.then(cache => cache.match(event.request)
.then((response) => {
if (response) {
return response;
}
else {
return fetch(event.request)
.then((response) => {
const resClone = response.clone();
return caches.open(staticCacheName)
.then((cache) => {
cache.put(event.request, response);
updated = true;
return resClone;
})
})
}
})
)
)
if (!updated) {
event.waitUntil(update(event.request))
}
}
该update
函数通过使用网络获取请求来更新缓存。问题是该updated
变量始终为假,导致该update
函数每次都运行。
我对服务人员不太熟悉,代码基本上是从多个来源拼接而成的。所以欢迎替代/更好的解决方案。我的最终目标是首先缓存,在后台从网络获取,并设置一个标志来告知内容是否已更改。