Я только что попытался внедрить рабочих сервисов для кеширования некоторых файлов JSON и других активов на статическом сайте (выполняется на localhost chrome версии 47.0.2526.73 (64-разрядная версия)). Использование cache.addAll() Я добавил файлы в кэш, и когда я открываю вкладку ресурсов в chrome и нажимаю на хранилище кеша, все файлы перечислены.
Проблема, с которой я столкнулась, заключается в том, что мой рабочий-сервис указан как "активирован" и "работает" в chrome://service-worker-internals, однако я не могу определить, действительно ли работник перехватывает запросы и обслуживает кэшированные файлы. Я добавил слушателя событий, и даже когда я консоль регистрирую событие в экземпляре инструментальных средств для сервисных работников, он никогда не попадает в точку прерывания:
this.addEventListener('install', function(event) {
event.waitUntil(
caches.open('v1').then(function(cache) {
console.log(cache);
return cache.addAll([
'/json/0.json',
'/json/1.json',
'/json/3.json',
'/json/4.json',
'/json/5.json',
]);
})
);
});
this.addEventListener('fetch', function(event) {
console.log(event);
var response;
event.respondWith(caches.match(event.request).catch(function() {
return fetch(event.request);
}).then(function(r) {
response = r;
caches.open('v1').then(function(cache) {
cache.put(event.request, response);
});
return response.clone();
}).catch(function() {
}));
});
В основном я просматриваю вещи точно так, как это описано в инструкции для работников служб HTML5, но я уверен, что мои ресурсы не будут обслуживаться из кеша. Я отметил, что активы, обслуживаемые сервисным работником, отмечены как таковые на вкладке сети devtools в столбце размера, указав "от работников службы".
Кажется, что мой код ничем не отличается от примеров, но по какой-то причине он никогда не ударяет по событию выборки. Суть моего кода: https://gist.github.com/srhise/c2099b347f68b958884d