From 254dd6243bcaf76697aade1285423a31605e0e72 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 7 Dec 2015 23:06:58 -0800 Subject: [PATCH] Cache index in service worker --- src/service-worker/index.js | 38 +++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/service-worker/index.js b/src/service-worker/index.js index 40e94ec79c..474809fd6f 100644 --- a/src/service-worker/index.js +++ b/src/service-worker/index.js @@ -1,3 +1,8 @@ +const CACHE = '0.10'; +const INDEX_CACHE_URL = '/'; +const INDEX_ROUTES = ['/', '/logbook', '/history', '/map', '/devService', '/devState', + '/devEvent', '/devInfo', '/states']; + if (__DEV__) { console.log('Service Worker initialized.'); } @@ -6,6 +11,10 @@ self.addEventListener('install', event => { if (__DEV__) { console.log('Service Worker installed.'); } + + event.waitUntil( + caches.open(CACHE).then(cache => cache.add(INDEX_CACHE_URL)) + ); }); self.addEventListener('activate', event => { @@ -16,8 +25,33 @@ self.addEventListener('activate', event => { } }); -self.addEventListener('onmessage', message => { +self.addEventListener('message', event => { if (__DEV__) { - console.log('Message received', message); + console.log('Message received', event.data); } }); + +self.addEventListener('fetch', event => { + const path = event.request.url.substr(event.request.url.indexOf('/', 7)); + + if (event.request.mode !== 'same-origin' || !INDEX_ROUTES.includes(path)) { + return fetch(event.request); + } + + event.respondWith( + caches.open(CACHE).then(cache => { + return cache.match(INDEX_CACHE_URL).then(cachedResponse => { + const networkFetch = fetch(event.request).then(response => { + cache.put(INDEX_CACHE_URL, response.clone()); + return response; + }); + + if (__DEV__ && cachedResponse) { + console.log('Serving cached response for', path); + } + + return cachedResponse || networkFetch; + }); + }) + ); +});