- From: Arthur Stolyar <notifications@github.com>
- Date: Wed, 17 Aug 2016 17:42:40 -0700
- To: slightlyoff/ServiceWorker <ServiceWorker@noreply.github.com>
- Message-ID: <slightlyoff/ServiceWorker/issues/959/240592204@github.com>
@jakearchibald I see what you mean. For the case in #920 though, the SW is spawned exactly to the navigation request, so knowing this, browser may not remove that pre-flight request from `requests` store until SW is destroyed. For the case of link=preload, yeah, this way requests could be potentially missed, but since SW already controls the scope, it could be handled this way: _(cache matching added, assuming SW cached request and if it's not inflight -- try to get from cache)_ ```js self.addEventListener('fetch', event => { const request = self.requests.match(event.request).then(inflight => { return inflight || self.caches.match(event.request) || fetch(event.request); }); event.respondWith(request); }); ``` Also there could be other solution for link=preload right now: ```js let stylesRequest; self.addEventListener('fetch', event => { const url = new URL(event.request.url); if (url.path === '/styles.css') { let request; if (!stylesRequest) { stylesRequest = fetch(event.request).then((res) => { stylesRequest = null; return res; }); } event.respondWith(stylesRequest); } }); ``` But this is reliance on a global state which is obviously bad and shouldn't be used, especially we SW team decide to on multiple SW instances. Just trying to generate some ideas. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/slightlyoff/ServiceWorker/issues/959#issuecomment-240592204
Received on Thursday, 18 August 2016 00:43:10 UTC