Я недавно начал вникать в сервисных работников и связанные с ними стратегии. Кажется, в моем сознании есть некоторая путаница, или, если я правильно понимаю, что-то вроде изъяна во всем API - проблема в том, что когда вы вносите изменения в файл serviceworker.js
(то есть меняете номер версии в этот файл, потому что вы внесли изменения в свой веб-сайт), пользователь должен затем посетить сайт дважды, чтобы увидеть изменения? Один раз для регистрации и установки нового работника сервиса, а второй раз для его активации (т.е. доступ к новому кешу).
Теперь в реальном мире, если на вашем сайте есть проблема, будь то неработающая ссылка, ошибка JavaScript или неверная информация в сообщении в блоге и т. Д., Когда пользователь возвращается на этот сайт впервые после вас Вы сделали исправление, они не смогут увидеть это исправление, если не вернутся во второй раз? Даже если вы внесли изменения?
Я имею в виду, это не может быть правдой ... конечно?
код, который я использую
var preCacheList = [
"/", "index.html", "work.html", "contact.html", "style.css", "js/main.js"
];
var CACHE_STATIC_NAME = 'static-v1.4';
var CACHE_DYNAMIC_NAME = 'dynamic-v1.4';
self.addEventListener('install', function(event) {
console.log('[Service Worker] Installing Service Worker ...', event);
event.waitUntil(
caches.open(CACHE_STATIC_NAME)
.then(function(cache) {
console.log('[Service Worker] Precaching App Shell');
cache.addAll(preCacheList);
})
)
});
self.addEventListener('activate', function(event) {
console.log('[Service Worker] Activating Service Worker ....', event);
event.waitUntil(
caches.keys()
.then(function(keyList) {
return Promise.all(keyList.map(function(key) {
if (key !== CACHE_STATIC_NAME && key !== CACHE_DYNAMIC_NAME) {
console.log('[Service Worker] Removing old cache.', key);
return caches.delete(key);
}
}));
})
);
return self.clients.claim();
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
if (response) {
return response;
} else {
return fetch(event.request)
.then(function(res) {
return caches.open(CACHE_DYNAMIC_NAME)
.then(function(cache) {
cache.put(event.request.url, res.clone());
return res;
})
})
.catch(function(err) {
});
}
})
);
});