- From: Jake Archibald <notifications@github.com>
 - Date: Wed, 10 Dec 2014 09:13:15 -0800
 - To: slightlyoff/ServiceWorker <ServiceWorker@noreply.github.com>
 - Message-ID: <slightlyoff/ServiceWorker/issues/573/66486816@github.com>
 
I think the changes are right, but it doesn't solve the problems I thought it might:
```js
self.addEventListener('fetch', function(event) {
  var requestURL = new URL(event.request.url);
  if (/\.jpg$/.test(requestURL.pathname)) {
    event.respondWith(
      caches.match('/img.jpg').then(function(response) {
        return response || fetch('/img.jpg').then(function(response) {
          caches.open('img-cache').then(function(cache) {
            cache.put('/img.jpg', response.clone());
            return response;
          });
        });
      })
    );
  }
});
```
Imagine a page with `a.jpg` and `b.jpg`:
1. `a.jpg`: look for `/img.jpg` in caches
1. `b.jpg`: look for `/img.jpg` in caches
1. `a.jpg`: no match found
1. `a.jpg`: fetch `/img.jpg`
1. `b.jpg`: fetch `/img.jpg`
1. etc etc
Should we try to solve the above or leave it to devs? Devs could do it with something like:
```js
var imgRequest;
self.addEventListener('fetch', function(event) {
  var requestURL = new URL(event.request.url);
  if (/\.jpg$/.test(requestURL.pathname)) {
    event.respondWith(
      caches.match('/img.jpg').then(function(response) {
        if (response) return response;
        if (!imgRequest) {
          imgRequest = fetch('/img.jpg').then(function(response) {
            caches.open('img-cache').then(function(cache) {
              cache.put('/img.jpg', response.clone());
              return response;
            });
          });
        }
        return imgRequest.then(function(response) {
          return response.clone();
        });
      })
    );
  }
});
```
---
Reply to this email directly or view it on GitHub:
https://github.com/slightlyoff/ServiceWorker/issues/573#issuecomment-66486816
Received on Wednesday, 10 December 2014 17:13:42 UTC