From 8b8f6cbca243f356b6a16c01d6f6900cfc9eccb9 Mon Sep 17 00:00:00 2001 From: tusooa Date: Fri, 23 Aug 2024 02:49:07 -0400 Subject: [PATCH] Cache assets when cache is missing --- src/sw.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/sw.js b/src/sw.js index f9ae8dc17..aa061e14f 100644 --- a/src/sw.js +++ b/src/sw.js @@ -96,14 +96,16 @@ const isEmoji = req => { return url.pathname.startsWith('/emoji/') } const isNotMedia = req => { - console.log('req.method=', req.method) if (req.method !== 'GET') { return false } const url = new URL(req.url) - console.log('pathname=', url.pathname) return !url.pathname.startsWith('/media/') } +const isAsset = req => { + const url = new URL(req.url) + return cacheFiles.includes(url.pathname) +} const isSuccessful = (resp) => { if (!resp.ok) { @@ -216,17 +218,23 @@ self.addEventListener('fetch', (event) => { // Do not mess up with remote things const isSameOrigin = (new URL(event.request.url)).origin === self.location.origin if (shouldCache && event.request.method === 'GET' && isSameOrigin && isNotMedia(event.request)) { + console.debug('[Service worker] fetch:', event.request.url) event.respondWith((async () => { const r = await caches.match(event.request) + const isEmojiReq = isEmoji(event.request) - if (r && (isSuccessful(r) || !isEmoji(event.request))) { + if (r && isSuccessful(r)) { + console.debug('[Service worker] already cached:', event.request.url) return r } try { const response = await fetch(event.request) - if (response.ok && isSuccessful(response) && isEmoji(event.request)) { - const cache = await caches.open(emojiCacheKey) + if (response.ok && + isSuccessful(response) && + (isEmojiReq || isAsset(event.request))) { + console.debug(`[Service worker] caching ${isEmojiReq ? 'emoji' : 'asset'}:`, event.request.url) + const cache = await caches.open(isEmojiReq ? emojiCacheKey : cacheKey) await cache.put(event.request.clone(), response.clone()) } return response