aboutsummaryrefslogtreecommitdiff
path: root/static/service-worker
diff options
context:
space:
mode:
Diffstat (limited to 'static/service-worker')
-rw-r--r--static/service-worker/worker.js51
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));
});