Back/Forwardキャッシュ

JavaScriptヒープを含むページ全体のスナップショットがメモリに保存される。タイマーやプロミスなど、タスクキューに入っている保留中のタスクは一時停止され、bfcacheから復元されたときに再開される。

beforeunloadイベントリスナ、window.openerの参照があるページはbfcacheされないため、必要最小限にする。また、IndexedDBのトランザクション中、fetchやXMLHttpRequestの進行中、WebSocketやWebRTCの接続が開かれている間もbfcacheされない。ただし、pagehideイベントでそれらを閉じればbfcacheされる。

なお、共有端末で認証が必要なデータにアクセスするなど、セキュリティ上の理由で意図的にbfcacheを無効にしたい場合は、そのページのレスポンスヘッダCache-Controlno-storeを指定。Bfcacheの利点は大きく、基本的に無効化は推奨されない。うまく共存できるよう実装するべき。

Google Analyticsなどページビュー数を計測するツールでは、冒頭で述べたbfcacheの性質上、bfcacheから復元された場合は新しいページビューとしてカウントできない。そのため、pageshowイベントでpersistedな場合に手動でカウントするとよい。

Back/forward cache web.dev