diff options
Diffstat (limited to 'static/service-worker/worker.js')
| -rw-r--r-- | static/service-worker/worker.js | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/static/service-worker/worker.js b/static/service-worker/worker.js index ad5a374..be23018 100644 --- a/static/service-worker/worker.js +++ b/static/service-worker/worker.js @@ -1,18 +1,45 @@ -const putInCache = async (request, response) => { - const cache = await caches.open("v1"); - await cache.put(request, response); +const cachable_api = [ + '/image/', + '/profile/', +]; + +const is_cachable = (url) => { + if (!url.includes('/api/') || url.endsWith('.js')) { + return true; + } + + for (const api of cachable_api) { + if (url.includes(api)) { + return true; + } + } + + return false; +} + +const put_in_cache = async (request, response) => { + const cache = await caches.open("v1"); + await cache.put(request, response); }; -const cacheFirst = async (request, event) => { - const responseFromCache = await caches.match(request); - if (responseFromCache) { - return responseFromCache; - } - const responseFromNetwork = await fetch(request); - event.waitUntil(putInCache(request, responseFromNetwork.clone())); - return responseFromNetwork; +const cache_first = async (request, event) => { + if (request.method !== 'GET') { + return await fetch(request); + } + + if (!is_cachable(request.url)) { + return await fetch(request); + } + + const responseFromCache = await caches.match(request); + if (responseFromCache) { + return responseFromCache; + } + const responseFromNetwork = await fetch(request); + event.waitUntil(put_in_cache(request, responseFromNetwork.clone())); + return responseFromNetwork; }; self.addEventListener("fetch", (event) => { - event.respondWith(cacheFirst(event.request, event)); + event.respondWith(cache_first(event.request, event)); }); |