Я только недавно начал возиться с работниками сферы обслуживания, и у меня возникла ситуация, когда независимо от того, какие файлы я советую добавить в кеш, он добавляет все . Теперь это обычно означало бы меньше работы для автономного приложения, но я немного запутался. Таким образом, кажется, что кэш имеет два метода добавления запросов к нему, .add()
и .addAll()
, причем последний способен принимать массив запросов, но даже с помощью .add()
с жестко закодированным запросом, абсолютно все запросы, похоже, попадают в кеш.
Код, который у меня есть, выглядит следующим образом:
if ('serviceWorker' in navigator) {
//console.log('CLIENT: service worker registration in progress.');
navigator.serviceWorker.register('/sw.js').then(function() {
//console.log('CLIENT: service worker registration complete.');
}, function() {
//console.log('CLIENT: service worker registration failure.');
});
} else {
console.log('CLIENT: service worker is not supported.');
}
... это происходит на реальной странице, вызывающей работника сервиса и работника сервиса сам по себе:
var cacheName = 'cache';
self.addEventListener('install', (e) => {
console.log('[Service Worker] Install');
var appShellFiles = [
];
e.waitUntil(
caches.open(cacheName).then((cache) => {
console.log('[Service Worker] Caching all: app shell and content');
return cache.add('assets/images/boy.svg').then(function() {
// requests have been added to the cache
console.log('added')
});
})
);
});
self.addEventListener('fetch', (e) => {
e.respondWith(
caches.match(e.request).then((r) => {
console.log('[Service Worker] Fetching resource: '+e.request.url);
return r || fetch(e.request).then((response) => {
return caches.open(cacheName).then((cache) => {
console.log('[Service Worker] Caching new resource: '+e.request.url);
cache.put(e.request, response.clone());
return response;
});
});
})
);
});
self.addEventListener('activate', (e) => {
e.waitUntil(
caches.keys().then((keyList) => {
return Promise.all(keyList.map((key) => {
if(key !== cacheName) {
return caches.delete(key);
}
}));
})
);
});
... но здесь .add('assets/images/boy.svg')
был .addAll(appShellFiles)
, который сам по себе содержал отдельные файлы, но, казалось, игнорировал список и все еще кэшировал все. Чего мне не хватает?