0Pricing
JavaScript Academy · レッスン

キャッシュ戦略

Cache First と Network First のパターンを適用します。

「キャッシュ戦略」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。

なぜ戦略が重要なのか

アセットによって適した扱い方は異なります。ロゴは常にキャッシュから提供できますが、APIのフィードは最新でなければなりません。キャッシュ戦略によって、キャッシュとネットワークのどちらを先に試すか、また両者をどのように組み合わせるかを決めます。

Cache-first

Cache-first:キャッシュを確認し、見つかればそれを返し、見つからなければネットワークから取得します。フォント、CSS、画像など、静的で変更頻度の低いアセットに適しています。

async function cacheFirst(request) {
  const cached = await caches.match(request);
  return cached || fetch(request);
}

フォールバックキャッシュ付きCache-first

キャッシュに見つからなかった場合は、取得した結果を保存することもできます。次回のリクエストが高速になり、ユーザーが閲覧するにつれてキャッシュが遅延的に温められます。

async function cacheFirst(request) {
  const cached = await caches.match(request);
  if (cached) return cached;
  const fresh = await fetch(request);
  const cache = await caches.open('runtime');
  cache.put(request, fresh.clone());
  return fresh;
}

Network-first

Network-first:まずネットワークを試し、成功したらその結果を使ってキャッシュします。失敗した場合(オフラインの場合)はキャッシュにフォールバックします。ニュースやダッシュボードなど、頻繁に更新されるコンテンツに適しています。

async function networkFirst(request) {
  try {
    const fresh = await fetch(request);
    const cache = await caches.open('runtime');
    cache.put(request, fresh.clone());
    return fresh;
  } catch (err) {
    return caches.match(request);
  }
}

Stale-While-Revalidate

Stale-while-revalidate: 速度を優先してキャッシュ済みのコピーをすぐに返しながら、バックグラウンドで新しいコピーを取得して、次回に備えてキャッシュを更新します。速度と鮮度のバランスに優れた方法です。

async function staleWhileRevalidate(request) {
  const cache = await caches.open('runtime');
  const cached = await cache.match(request);
  const network = fetch(request).then(res => {
    cache.put(request, res.clone());
    return res;
  });
  return cached || network;
}

Network-Only と Cache-Only

シンプルな両極端の2つです。

  • Network-only: 常に取得し、キャッシュは使用しません(例: アナリティクスのビーコン)。
  • Cache-only: 事前にキャッシュしたアセットだけを提供し、ネットワークには一切アクセスしません(例: アプリシェル)。
// network-only:
// return fetch(request);
// cache-only:
// return caches.match(request);

リクエストの種類によるルーティング

実際のアプリでは、リクエストごとに戦略を選択します。fetch ハンドラーで request.url または request.destination を調べ、それに応じてルーティングします。

self.addEventListener('fetch', (event) => {
  const url = new URL(event.request.url);
  if (url.pathname.startsWith('/api/')) {
    event.respondWith(networkFirst(event.request));
  } else {
    event.respondWith(cacheFirst(event.request));
  }
});

オフラインフォールバックの処理

ネットワークとキャッシュの両方で見つからない場合は、壊れたレスポンスを返すのではなく、ユーザーに配慮したオフラインページやプレースホルダーを返します。

async function withOfflineFallback(request) {
  return (await caches.match(request)) ||
         (await caches.match('/offline.html'));
}

成功したレスポンスだけをキャッシュする

エラーをキャッシュしないようにします。保存する前に response.ok(またはステータス)を確認し、404や500によってキャッシュが汚染されないようにします。

const fresh = await fetch(request);
if (fresh.ok) {
  cache.put(request, fresh.clone());
}
return fresh;

戦略の選択

コンテンツに合わせて戦略を選択します。

  • 静的アセット: cache-first
  • 動的データ: network-first
  • 混在するコンテンツ: stale-while-revalidate

ほとんどのアプリでは、リクエストルーティングを使って複数の戦略を組み合わせます。

戦略のまとめ

キャッシュ戦略を使うと、1つのサービスワーカーでアプリ全体をインテリジェントに提供できます。リクエストごとに戦略を選択することで、静的アセットはすぐに、動的データは最新の状態で提供し、オフライン時には適切にフォールバックできます。

クイックチェック

キャッシュ戦略についての理解度を確認します。

まとめ

キャッシュ戦略について学びました。

  • 静的アセットには Cache-first。
  • 最新の動的データには Network-first。
  • 速度と鮮度の両立には Stale-while-revalidate。
  • request.url/destination を使ってリクエストごとにルーティングする。
  • 成功したレスポンスだけをキャッシュし、オフラインフォールバックを用意する。

次は、バックグラウンド同期とキャッシュの更新について学びます。

よくある質問

「キャッシュ戦略」レッスンは無料ですか?

はい。「キャッシュ戦略」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。

「キャッシュ戦略」で何を学びますか?

Cache First と Network First のパターンを適用します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「キャッシュ戦略」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Service Worker を登録する
  2. Cache API
  3. キャッシュ戦略
  4. バックグラウンド同期と更新
← JavaScript Academyに戻る