From 5a5bd5ff1ad18142099eab9c4fa4d59d746513eb Mon Sep 17 00:00:00 2001 From: AmirrezaRezaeii Date: Tue, 21 Apr 2026 15:16:30 +0330 Subject: [PATCH] Strategy: cache with network fallback --- public/sw.js | 58 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/public/sw.js b/public/sw.js index 4975379..3472c37 100644 --- a/public/sw.js +++ b/public/sw.js @@ -7,7 +7,13 @@ self.addEventListener("install", function (event) { event.waitUntil( caches.open(CACHE_STATIC_NAME).then((cache) => { console.log("[SW precache]"); - return cache.addAll(["/", "/index.html", "/offline.html", "/help/index.html", "/js/app.js"]); + return cache.addAll([ + "/", + "/index.html", + "/offline.html", + "/help/index.html", + "/js/app.js", + ]); }), ); }); @@ -29,26 +35,38 @@ self.addEventListener("activate", function (event) { return self.clients.claim(); }); -self.addEventListener("fetch", function (event) { +// self.addEventListener("fetch", function (event) { +// event.respondWith( +// caches.match(event.request).then((res) => { +// console.log("res", res); +// if (res) { +// return res; +// } else { +// return fetch(event.request.url) +// .then((res) => { +// return caches.open(CACHE_DYNAMIC_NAME).then((cache) => { +// cache.put(event.request.url, res.clone()); +// return res; +// }); +// }) +// .catch(() => { +// return caches.open(CACHE_STATIC_NAME).then((cache) => { +// return cache.match("/offline.html"); +// }); +// }); +// } +// }), +// ); +// }); + +// Strategy: cache with network fallback + +self.addEventListener("fetch", (event) => { event.respondWith( - caches.match(event.request).then((res) => { - console.log("res", res); - if (res) { - return res; - } else { - return fetch(event.request.url) - .then((res) => { - return caches.open(CACHE_DYNAMIC_NAME).then((cache) => { - cache.put(event.request.url, res.clone()); - return res; - }); - }) - .catch(() => { - return caches.open(CACHE_STATIC_NAME).then((cache) => { - return cache.match("/offline.html"); - }); - }); - } + caches.open(CACHE_STATIC_NAME).then((cache) => { + return cache.match(event.request).then((res) => { + return res || fetch(event.request); + }); }), ); });