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";
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 filesToCache = [
OFFLINE_URL
const urlsToCache = [
'/',
'/admin',
OFFLINE_URL,
'/icons/icon-192x192.png',
'/icons/icon-512x512.png'
];
self.addEventListener("install", (event) => {
event.waitUntil(
caches.open(CACHE_NAME)
.then((cache) => cache.addAll(filesToCache))
);
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(urlsToCache))
.then(self.skipWaiting())
);
});
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(keys =>
Promise.all(keys.map(key => {
if (key !== CACHE_NAME) return caches.delete(key);
}))
)
);
self.clients.claim();
});
self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.map((cacheName) => {
if (cacheName !== CACHE_NAME) {
return caches.delete(cacheName);
}
})
);
})
self.addEventListener('fetch', event => {
if (event.request.mode === 'navigate') {
event.respondWith(
fetch(event.request).catch(() =>
caches.match(OFFLINE_URL)
)
);
} else {
event.respondWith(
caches.match(event.request).then(response =>
response || fetch(event.request)
)
);
}
});