Yahoo!ニュースの取り組み事例でブラウザバックの最適化の話が記事になっていた
この中で、キャッシュした記事リストをリロード時に破棄するため、performance.getEntriesByType()
を使ってリロード判定する方法が紹介されていたが、performance.getEntriesByType()
を知らなかったので調べた
こういう風に使うみたい
entries = window.performance.getEntriesByType(type);
type
にはPerformanceEntry.entryType
が入る
サイトのパフォーマンス計測などに使われるものだが、このうちページのロードまたはアンロードのタイミングを計測するときに使うnavigation
を値としてセットする
entries = window.performance.getEntriesByType("navigation");
戻り値のentries
は指定されたtype
を持つPerformanceEntry
オブジェクトのリストで、項目はエントリ 'startTime に基づいて時系列に並んでいる
指定されたtype
を持つオブジェクトがない場合、または引数が指定されていない場合は、空のリストが返される
entries = window.performance.getEntriesByType("navigation"); if (entries[0].type === 'reload') { // 何か処理 }
navigation
をセットした場合は、PerformanceNavigationTiming
のリストになり、そのオブジェクトが持つtype
プロパティの値がreload
であれば、リロードされたと判別できる
PerformanceNavigationTiming
のtype
プロパティにセットされる値は以下に記載がある
developer.mozilla.org
- "navigate"
リンクをクリックするか、ブラウザのアドレスバーにURLを入力するか、フォームを送信するか、以下のreload
とback_forward
以外のスクリプト操作で初期化した場合 - "reload"
ブラウザのリロード操作またはlocation.reload()
が行われた場合 - "back_forward"
ブラウザのヒストリーバックまたはヒストリーフォワード操作をした場合 - "prerender"
事前レンダリングによって初期化された場合
これでどうページが表示されたかの判別ができるので色々使えそう