Back/Forwardキャッシュ
JavaScriptヒープを含むページ全体のスナップショットがメモリに保存される。タイマーやプロミスなど、タスクキューに入っている保留中のタスクは一時停止され、bfcacheから復元されたときに再開される。
beforeunload
イベントリスナ、window.opener
の参照があるページはbfcacheされないため、必要最小限にする。また、IndexedDBのトランザクション中、fetchやXMLHttpRequestの進行中、WebSocketやWebRTCの接続が開かれている間もbfcacheされない。ただし、pagehide
イベントでそれらを閉じればbfcacheされる。
なお、共有端末で認証が必要なデータにアクセスするなど、セキュリティ上の理由で意図的にbfcacheを無効にしたい場合は、そのページのレスポンスヘッダCache-Control
にno-store
を指定。Bfcacheの利点は大きく、基本的に無効化は推奨されない。うまく共存できるよう実装するべき。
Google Analyticsなどページビュー数を計測するツールでは、冒頭で述べたbfcacheの性質上、bfcacheから復元された場合は新しいページビューとしてカウントできない。そのため、pageshow
イベントでpersisted
な場合に手動でカウントするとよい。
Back/forward cache web.dev