ブラウザのバックフォワードキャッシュ(BFCache)とページライフサイクル
BFCacheは条件を満たすページを履歴移動時に速く復元できる仕組みです。復元や速度は保証されず、ブラウザごとの適格条件とライフサイクル信号の読み方を解説します。
発行・訂正窓口:infostoa · 編集基準
この記事の個別の執筆者・専門査読者の情報は提供されていません。
BFCacheの復元とページ状態
バック・フォワードキャッシュ(BFCache)は、条件を満たす文書と実行状態をメモリーに保持し、履歴移動で復元できるブラウザー機能です。HTTPキャッシュが応答データを保存するのに対し、BFCacheはページの状態を保持します。適格性はブラウザーやページの状態によって異なり、保持後もメモリー確保のため破棄されることがあります。復元や一定の高速化を保証する機能とは考えないでください。
ページを保管して戻す比喩です。hidden・frozen状態やpagehide・pageshowイベントを描いたものではありません。
実際の復元を示す信号
戻る・進む操作の後、pageshowイベントのpersisted === trueで文書が実際に復元されたと確認できます。pagehide.persisted === trueが示すのはブラウザーがページを保持しようとする意図であり、その後の復元を約束するものではありません。Chromiumのfreeze・resumeイベントはバックグラウンドタブの凍結時にも発生するため、BFCacheの測定ではpageshow.persistedを使います。
復帰後に更新する情報
たとえば購入ページを開いたまま別画面でカートを変更し、その後戻る状況を考えます。まずpageshow.persistedで実際の復元か通常ロードかを判別します。復元された場合は価格や在庫などサーバー側で変わり得る情報を確認し、凍結中に切断された接続を重複させずに再接続します。未保存の入力はアプリの方針に沿って復元するか、利用者に確認します。これは説明用の仮想例で、特定のアプリで実行した結果ではありません。
適格性を調べる手順
- 対象ブラウザーの診断機能で実際の戻る・進む経路を試し、復元の有無と報告された除外理由を記録します。
- 必須の後処理を
unloadに依存させず、必要ならpagehideを使います。beforeunloadは未保存の変更を警告する必要がある間だけ登録します。 - WebSocket、WebRTC、IndexedDBを、全ブラウザーに共通する除外項目とみなさず、実際のエンジンとバージョンで報告された理由を確認します。離脱時に接続を閉じるなら
pagehideで処理し、実際に復元された後のpageshowで再接続します。 - BFCacheを避ける目的で
Cache-Control: no-storeを使いません。復元後に機密情報や更新され得る情報を再確認または消去します。
報告ではブラウザー、バージョン、経路ごとのpageshow.persistedによる実際の復元回数と復帰時間を記録し、通常の初回ロード指標と分けます。一つの経路での成功は、サイト全体の復元率を示しません。