From 45e2c2f694a8dd5ffda93845b5f2b3bec80c1ed3 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Fri, 2 Aug 2024 13:55:20 +0200 Subject: [PATCH] make service worker serve cache first --- dist/support.js | 1 + dist/sw.js | 45 +++++++++++++++++++-------------------------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/dist/support.js b/dist/support.js index 2a9bce55..39110646 100644 --- a/dist/support.js +++ b/dist/support.js @@ -21,6 +21,7 @@ async function registerServiceWorker() { setTimeout(() => window.location.reload(), 500); } else if (registration.active) { console.log("Service worker active"); + registration.update(); } } catch (error) { console.error(`Could not install service worker: ${error}`); diff --git a/dist/sw.js b/dist/sw.js index 5768bc6c..fac4171d 100644 --- a/dist/sw.js +++ b/dist/sw.js @@ -1,38 +1,31 @@ -const CACHE_VERSION = "v1"; +const CACHE_VERSION = "v2"; + +self.addEventListener("fetch", (event) => { + event.respondWith(handleRequest(event)); +}); async function handleRequest(event) { - const responsePromise = getResponse(event); - event.respondWith(responsePromise); -} - -async function getResponse(event) { - try { - return await fetchAndCache(event); - } catch { - return await getFromCache(event); + const response = await getFromCache(event); + if (response) { + fetchAndCache(event); // Call this but don't await, allowing the cache to update in the background + return response; } -} - -async function fetchAndCache(event) { - const request = event.request; - - const response = await fetch(request); - - const cache = await caches.open(CACHE_VERSION); - await cache.put(request, response.clone()); - - return response; + return fetchAndCache(event); } async function getFromCache(event) { const request = event.request; - const cache = await caches.open(CACHE_VERSION); const response = await cache.match(request); - return response; } -self.addEventListener("fetch", (event) => { - handleRequest(event); -}); \ No newline at end of file +async function fetchAndCache(event) { + const request = event.request; + const response = await fetch(request); + if (response.status === 200) { // Only cache successful responses + const cache = await caches.open(CACHE_VERSION); + cache.put(request, response.clone()); + } + return response; +}