Я хотел бы инициализировать два кэша во время моего события Server Worker install
, но только один является обязательным.
В своей автономной кулинарной книге При установке - не в качестве зависимости , Джейк Арчибальд показывает, как кэшировать два набора файлов, только один из которых является обязательным. Но это тот же кеш, я хочу два кеша.
Этот вопрос о переполнении стека показывает, как инициализировать несколько кэшей, но принятый ответ делает все наборы файлов обязательными (я думаю).
Я ищу сочетание этих двух вариантов:
- два тайника
- два набора файлов, по одному на каждый кеш
- только один набор файлов обязателен для установки, чтобы быть действительным
Я попробовал себя и написал этот код:
const version = 'ex13'
const offlineFallback = 'offline-fallback.html'
const shellCacheName = 'shellCache' + version
const shellCacheFiles = [offlineFallback, 'styles.css']
const contentCacheName = 'contentCache' + version
const contentCacheFiles = ['horse.png', '/', 'index.html']
// https://mdn.io/serviceworker+oninstall
self.addEventListener('install', event => {
caches.open(contentCacheName).then(contentCache => {
// These items won't block the installation
// https://mdn.io/cache+addall
contentCache
.addAll(contentCacheFiles)
.then(() => {
console.info(`[SW] content files added to ${contentCacheName}`)
})
.catch(error => {
console.error(
`[SW] Couldn't add content files to ${contentCacheName}: ${error}`,
)
})
})
event.waitUntil(
caches.open(shellCacheName).then(shellCache => {
// These items must be cached for the Service Worker to complete installation
return shellCache
.addAll(shellCacheFiles)
.then(() => {
console.info(`[SW] Shell files added to ${shellCacheName}`)
console.info(`[SW] Service Worker ${version} installation done`)
})
.catch(error => {
console.error(
`[SW] Couldn't add shell files to ${shellCacheName}: ${error}`,
)
})
}),
)
})
Например, если отсутствует styles.css
, при инициализации shellCache
произошла ошибка, поэтому я не получаю сообщение Service Worker ex13 installation done
. НО, события activate
и fetch
запускаются!
Я думаю, что я не очень хорош в использовании обещаний ...