Я использую следующую логику в моем работнике службы (в моих собственных словах):Service Worker получить из кэша затем обновить кэш
Если кэш существует, то использовать его, но и обновлять кэш из сети для позже
event.respondWith(// on `fetch`
caches.open(CACHE)
.then(function(cache) {
return cache.match(request);
})
.then(function(matching) {
if (matching) {
requestAndUpdateCache(event);
return matching;
}
...
В дополнение к ответам с кэшированного ответа, я также запустить эту функцию, называемую requestAndUpdateCache
.
function requestAndUpdateCache(event){
var url = event.request.url + '?t=' + new Date().getTime();
fetch(url)
.then(function(response){
if (response && response.status === 200){
caches.open(CACHE)
.then(function(cache){
cache.put(event.request, response.clone());
});
}
}, function(error){
console.log(error);
});
}
Вопросы: Имеет ли эта функция и ее размещение имеет смысл выполнить логику, описанную выше?
было бы лучше использовать 'Promise.race' с ответами кэша и сети? –
Вы можете быть уверены, что если вы с некоторой неуверенностью узнаете, используется ли кешированный или «свежий» ответ. –
Что делать, если я хочу, чтобы сетевой ответ не просто обновлял кеш, но также был видимым по мере его поступления? например, отображать устаревшую информацию на секунду, а затем обновлять ее с помощью новой информации –