ありがとう、それは助けになります。さらに、「キャッシュ」を定義するコードを提供できますか？
もちろん！以下にキャッシュ定義の例を示す：
caches.open('my-cache')`です。

これはmy-cacheという名前のキャッシュを開きます(または作成します)。
.put()でアイテムをキャッシュに入れることができます：
cache.put(リクエスト、レスポンス)

つまり、基本的なキャッシュ戦略は次のようになります：
```js
caches.open('my-cache').then(cache => {
  cache.put('/foo', new Response('Hello world!'));
})
```
これは/foo URLへのリクエストに対してHello world!というレスポンスをキャッシュします。
そして後で.match()を使ってキャッシュから取り出すことができます：
cache.match('/foo')`」とします。

つまり、キャッシュを使ったシンプルなオフラインフォールバック戦略は次のようになります：
```js
caches.open('my-cache').then(cache => {
  cache.put('/foo', new Response('Hello world!'));
})

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => {
      if (response) return response;
      return fetch(event.request);
    })
  );
});
```
ネットワークが利用できない場合は、/fooに対するキャッシュされたレスポンスを提供し、利用可能な場合はネットワークのレスポンスを提供します。