Refactor service worker to improve caching strategy and offline support

This commit is contained in:
dhanabalan
2025-11-04 09:55:06 +05:30
parent aed8c36089
commit f83df4498b

View File

@@ -1,47 +1,93 @@
"use strict"; "use strict";
const CACHE_NAME = "offline-cache-v1"; // const CACHE_NAME = "offline-cache-v1";
// const OFFLINE_URL = '/offline.html';
// const filesToCache = [
// OFFLINE_URL
// ];
// self.addEventListener("install", (event) => {
// event.waitUntil(
// caches.open(CACHE_NAME)
// .then((cache) => cache.addAll(filesToCache))
// );
// });
// self.addEventListener("fetch", (event) => {
// if (event.request.mode === 'navigate') {
// event.respondWith(
// fetch(event.request)
// .catch(() => {
// return caches.match(OFFLINE_URL);
// })
// );
// } else {
// event.respondWith(
// caches.match(event.request)
// .then((response) => {
// return response || fetch(event.request);
// })
// );
// }
// });
// self.addEventListener('activate', (event) => {
// event.waitUntil(
// caches.keys().then((cacheNames) => {
// return Promise.all(
// cacheNames.map((cacheName) => {
// if (cacheName !== CACHE_NAME) {
// return caches.delete(cacheName);
// }
// })
// );
// })
// );
// });
const CACHE_NAME = 'pds-app-cache-v1';
const OFFLINE_URL = '/offline.html'; const OFFLINE_URL = '/offline.html';
const filesToCache = [ const urlsToCache = [
OFFLINE_URL '/',
'/admin',
OFFLINE_URL,
'/icons/icon-192x192.png',
'/icons/icon-512x512.png'
]; ];
self.addEventListener("install", (event) => { self.addEventListener('install', event => {
event.waitUntil( event.waitUntil(
caches.open(CACHE_NAME) caches.open(CACHE_NAME)
.then((cache) => cache.addAll(filesToCache)) .then(cache => cache.addAll(urlsToCache))
); .then(self.skipWaiting())
);
}); });
self.addEventListener("fetch", (event) => { self.addEventListener('activate', event => {
if (event.request.mode === 'navigate') { event.waitUntil(
event.respondWith( caches.keys().then(keys =>
fetch(event.request) Promise.all(keys.map(key => {
.catch(() => { if (key !== CACHE_NAME) return caches.delete(key);
return caches.match(OFFLINE_URL); }))
}) )
); );
} else { self.clients.claim();
event.respondWith(
caches.match(event.request)
.then((response) => {
return response || fetch(event.request);
})
);
}
}); });
self.addEventListener('activate', (event) => { self.addEventListener('fetch', event => {
event.waitUntil( if (event.request.mode === 'navigate') {
caches.keys().then((cacheNames) => { event.respondWith(
return Promise.all( fetch(event.request).catch(() =>
cacheNames.map((cacheName) => { caches.match(OFFLINE_URL)
if (cacheName !== CACHE_NAME) { )
return caches.delete(cacheName);
}
})
);
})
); );
} else {
event.respondWith(
caches.match(event.request).then(response =>
response || fetch(event.request)
)
);
}
}); });