Cumulative Layout Shift (CLS) をJavaScriptで検出する
はじめに
これまで、DevToolsのPerformanceタブからレイアウトシフトを確認していました。ですが、これだと目視する必要がある上に自動化できません。調べてみると、Layout Instability APIが見つかったのでそれの覚書です。
※PageSpeed Insightsでも確認できますが、ページ読み込み時のみです。
レイアウトシフトの計測期間は、ページのライフサイクル全体であるため、ページ読み込み時のみでは不足です。
CLSの検出コード
let cls = 0;
new PerformanceObserver((entryList) => {
for (const entry of entryList.getEntries()) {
if (!entry.hadRecentInput) { // 500ms以内にユーザー入力が発生していない
cls += entry.value; // レイアウトシフトを累積する
console.log(new Date().toISOString(), entry.entryType, cls, entry.value, entry);
} else {
// ユーザー入力によるレイアウトシフト
//console.log(new Date().toISOString(), entry.entryType, 'user input', cls, entry.value, entry);
}
}
}).observe({type:'layout-shift', buffered:true});
※entry.sources
で移動要素の領域の変化を確認できます
対応状況
2021年1月現在は、ChromeとEdgeなどのChromium系のブラウザが対応済みです。
思いつく使用用途
- ブックマークレットなどによる手動での確認
- ローカル環境の自動テスト
- ページ解析(google analyticsなど)でのCSLの収集