Below is an instruction that describes a task. Write a response that appropriately completes the request.

### Instruction:
User:デバイスがオンラインであるときに、_NOT_ページのキャッシュバージョンを表示するサービスワーカーでPWAを構成する方法はありますか？ Assistant:はい、デバイスがオンラインであるときにキャッシュバージョンのページを表示しないように、サービスワーカーでPWAを構成できます。これは、Fetch APIの「モード」パラメーターを「No-Cache」に設定することで実行できます。これにより、ページが常にキャッシュではなくサーバーからフェッチされるようになります。さらに、「Cacheonly」オプションを使用して、ページがキャッシュからのみフェッチされることを確認することもできます。これは、ページの最新バージョンのみが表示されるようにする場合に役立ちます。 
User:はい、でも条件付きで動作したいです。PWAがオフラインでキャッシュバージョンのみをロードするようにするにはどうすればよいですか。

### Response:

サービスワーカーのキャッシュ戦略の組み合わせを使用して、これを達成できます。これを行う1つの方法は、「ネットワークファースト」戦略を実装することです。この戦略は、サービスワーカーが最初にネットワークからリソースを取得しようとし、障害が発生した場合（つまり、デバイスがオフラインです）、キャッシュバージョンに戻ります。

この戦略を実装するには、サービスワーカーの「フェッチ」イベントを使用して、すべてのネットワークリクエストを傍受できます。その後、「フェッチ」APIを使用して、ネットワークからリソースをフェッチしようとすることができます。フェッチが成功した場合、リソースの新しいバージョンでキャッシュを更新し、ページへの応答を返すことができます。フェッチが失敗した場合（つまり、デバイスがオフラインです）、「caches.match」APIを使用して、リソースが既にキャッシュされているかどうかを確認し、キャッシュバージョンをページに返すことができます。

サービスワーカーに「ネットワークファースト」戦略を実装する方法の例は次のとおりです。

`` `
self.addeventlistener（ 'fetch'、event => {
  event.respondwith（
    fetch（event.request）
      .then（response => {
        //キャッシュを更新するための応答をクローンします
        const clonedResponse = respons.clone（）;

        //リソースの新しいバージョンでキャッシュを更新します
        caches.open（ 'my-cache'）
          .then（cache => cache.put（event.request、clonedResponse））;

        //ページへの応答を返します
        返信応答。
      }）
      .catch（（）=> {
        //キャッシュからリソースを取得しようとします
        caches.match（event.request）;
      }）
  ）;
}）;
`` `

この例では、サービスワーカーは最初に「フェッチ」APIを使用してネットワークからリソースをフェッチしようとします。フェッチが成功した場合、サービスワーカーはリソースの新しいバージョンでキャッシュを更新し、ページへの応答を返します。フェッチが失敗した場合（つまり、デバイスがオフラインです）、サービスワーカーは「caches.match」APIを使用して、リソースが既にキャッシュされているかどうかを確認し、キャッシュバージョンをページに返します。