FetchEvent: preloadResponse プロパティ
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.
Please take two minutes to fill out our short survey.
メモ: この機能はサービスワーカー内でのみ利用可能です。
preloadResponse
は FetchEvent
インターフェイスの読み取り専用プロパティで、 Promise
を返します。これは、ナビゲーション先読みが発生した場合はナビゲーション先読みの Response
に解決し、それ以外の場合は undefined
に解決します。
ナビゲーション先読みは、ナビゲーション先読みが有効であり、リクエストが GET
リクエストであり、かつナビゲーションリクエスト(ページや iframe を読み込むときにブラウザーが生成)である場合に起動します。
サービスワーカーは、 fetch イベントハンドラーでこのプロミスを待機することで、サービスワーカーの起動中に行われた読み込みリクエストの完了を追跡することができます。
値
例
このコードスニペットは、 Speed up Service Worker with Navigation Preloads (英語)からのものです。
onfetch
イベントハンドラーは、fetch
イベントを待ち受けします。
起動したら、FetchEvent.respondWith()
に、制御されたページに戻すプロミスを渡します。
このプロミスは、リクエストされたリソースに解決します。
もし Cache
オブジェクトの中に一致する URL リクエストがあれば、コードはキャッシュからレスポンスを返すためのプロミスを返します。
キャッシュに一致するものが見つからなかった場合、コードは preloadResponse
にあるプロミスを返します。
キャッシュや先読みされたレスポンスに一致するものがない場合、コードはネットワークからレスポンスをフェッチし、関連するプロミスを返します。
addEventListener("fetch", (event) => {
event.respondWith(
(async () => {
// 可能な場合はキャッシュから応答します
const cachedResponse = await caches.match(event.request);
if (cachedResponse) return cachedResponse;
// それ以外の場合は、プリロード済みのレスポンスがあればそれを使用します
const response = await event.preloadResponse;
if (response) return response;
// それ以外の場合は、ネットワークを試します。
return fetch(event.request);
})(),
);
});
仕様書
Specification |
---|
Service Workers # fetch-event-preloadresponse |