From 91e0f2f93ee44922ad0d58fc6d7d3b92a5a2f30d Mon Sep 17 00:00:00 2001 From: Moon Flower Date: Thu, 1 Jan 2026 11:14:09 +0330 Subject: first-paint cache + sw --- serviceWorker.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 serviceWorker.js (limited to 'serviceWorker.js') diff --git a/serviceWorker.js b/serviceWorker.js new file mode 100644 index 0000000..ba9ca7a --- /dev/null +++ b/serviceWorker.js @@ -0,0 +1,52 @@ +const CACHE_NAME = 'offline-cache-v1' +const ASSETS = [ + '/', + '/index.html', + '/styles.css', + '/styles3.css', + '/tempo.md', + '/bell.png', + '/bell.svg', + '/by-sa.png', + '/cc-by-sa-legalcode.txt', + '/symbols.txt' +] + +self.addEventListener('install', e => { + console.log('installing sw') + e.waitUntil(caches.open(CACHE_NAME).then(cache => cache.addAll(ASSETS))) + self.skipWaiting() +}) + +self.addEventListener('activate', e => { + console.log('sw activated') + e.waitUntil(self.clients.claim()) +}) + +self.addEventListener('fetch', e => { + const url = new URL(e.request.url) + const isTarget = ASSETS.includes(url.pathname) || url.pathname.startsWith('/fonts/') + + if (!isTarget) return + + e.respondWith( + caches.open(CACHE_NAME).then(async cache => { + const cachedResponse = await cache.match(e.request) + + if (cachedResponse) console.log(`cache ${url.pathname}`) + else console.log(`fetch ${url.pathname}`) + + const networkFetch = fetch(e.request).then(networkResponse => { + if (networkResponse.ok) { + console.log(`updating ${url.pathname}`) + cache.put(e.request, networkResponse.clone()) + } + return networkResponse + }).catch(err => { + console.error(`failed ${url.pathname}:`, err) + }) + + return cachedResponse || networkFetch + }) + ) +}) \ No newline at end of file -- cgit v1.2.3