Lighthouse を使用したウェブに関する指標の最適化

Chrome のウェブツールを使用してユーザー エクスペリエンスを改善する機会を見つける。

Addy Osmani
Addy Osmani

公開日: 2021 年 5 月 11 日

本日は、Lighthouse、PageSpeed、DevTools の新しいツール機能についてご紹介します。Web Vitals でサイトを改善する方法を特定するのに役立ちます。

ツールの概要を簡単に説明すると、Lighthouse は、ウェブページの品質を改善するためのオープンソースの自動化ツールです。Chrome DevTools のデバッグツール スイートにあり、公開されているウェブページや認証が必要なウェブページに対して実行できます。PageSpeed InsightsCIWebPageTest にも Lighthouse があります。

Lighthouse 7.x には、要素のスクリーンショットなどの新機能が含まれており、ユーザー エクスペリエンス指標に影響を与える UI の一部(レイアウト シフトに関与しているノードなど)を簡単に視覚的に検査できます。

また、PageSpeed Insights で要素のスクリーンショットのサポートも開始しました。これにより、ページの 1 回限りのパフォーマンス実行の問題をより簡単に見つけられるようになりました。

ページのレイアウト シフトに寄与している DOM ノードをハイライト表示した要素のスクリーンショット

Core Web Vitals の測定

Lighthouse は、Largest Contentful PaintCumulative Layout ShiftTotal Blocking TimeFirst Input Delay のラボ プロキシ)などのCore Web Vitals 指標合成的に測定できます。これらの指標は、読み込み、レイアウトの安定性、インタラクションの準備状況を反映しています。ウェブに関する主な指標の今後で取り上げられているFirst Contentful Paint などの他の指標も表示されます。

Lighthouse レポートの [Metrics] セクションには、これらの指標のラボ バージョンが含まれています。これは、ユーザー エクスペリエンスのどの部分に注意を払う必要があるかをまとめたビューとして使用できます。

Lighthouse のパフォーマンス指標
DevTools のパフォーマンス パネルの Web Vitals レーン
DevTools の [パフォーマンス] パネルの新しい [ウェブに関する指標] オプションには、上記の Layout Shift(LS)などの指標モーメントをハイライト表示したトラックが表示されます。

Chrome UX レポートRUM などのフィールド指標にはこのような制限はなく、実際のユーザー エクスペリエンスを反映しているため、ラボ環境のデータの補完として有用です。フィールドデータでは、ラボで得られる種類の診断情報を提供できないため、両者は連携して使用します。

Web Vitals の改善点を特定する

Largest Contentful Paint 要素を特定する

LCP は、読み込み時に感じられることを測定したものです。ページの読み込み中に、プライマリ(または「最大」)コンテンツが読み込まれ、ユーザーに表示されたポイントをマークします。

Lighthouse では、「Largest Contentful Paint 要素」の監査を行って、どの要素が最大の Contentful Paint であったかを特定できます。要素にカーソルを合わせると、メイン ブラウザ ウィンドウでその要素がハイライト表示されます。

「最大コンテンツの描画」要素

この要素が画像の場合は、この画像の読み込みを最適化することを検討することをおすすめします。Lighthouse には、画像の最適化に関するさまざまな診断が含まれています。これにより、画像の圧縮率を上げたり、サイズを変更したり、より最適な最新の画像形式で配信したりできるかどうかを把握できます。

適切なサイズの画像の監査

Annie Sullivan の LCP ブックマークレットも便利です。これを使用すると、1 回のクリックで LCP 要素を赤い長方形で簡単に特定できます。

ブックマークレットで LCP 要素をハイライト表示する

遅れて検出された画像をプリロードして LCP を改善する

Largest Contentful Paint を改善するには、重要なヒーロー画像がブラウザで遅れて検出される場合は、その画像をプリロードします。画像が検出可能になる前に JavaScript バンドルを読み込む必要がある場合、検出が遅れることがあります。

Largest Contentful Paint の画像をプリロードする

LCP 画像のプリロードについて、よくある質問がいくつかあります。

レスポンシブ画像をプリロードできますか?はい。以下のように、srcsetsizes を使用して指定されたレスポンシブなヒーロー画像があるとします。

<img src="lighthouse.jpg"
          srcset="lighthouse_400px.jpg 400w,
                  lighthouse_800px.jpg 800w,
                  lighthouse_1600px.jpg 1600w" sizes="50vw" alt="A helpful
Lighthouse">

link 属性に imagesrcset 属性と imagesizes 属性が追加されたので、srcsetsizes で使用されるのと同じ画像選択ロジックを使用して、レスポンシブ画像をプリロードできます。

<link rel="preload" as="image" href="lighthouse.jpg"
           imagesrcset="lighthouse_400px.jpg 400w,
                        lighthouse_800px.jpg 800w,
                        lighthouse_1600px.jpg 1600w"
imagesizes="50vw">

LCP 画像が CSS 背景で定義されている場合、監査でプリロードの機会もハイライトされますか?はい。

CSS 背景または <img> を介して LCP 画像としてフラグが立てられた画像は、ウォーターフォールの深さが 3 つ以上の場合、候補となります。

オフスクリーン画像の遅延読み込みと LCP での遅延読み込みの回避

最初のユーザー エクスペリエンスにとって重要でないオフスクリーン画像は、遅延読み込みできます。これは、ユーザーが画像の近くまでスクロールするまで画像のダウンロードを遅らせる手法です。これにより、重要なアセットのネットワーク競合を軽減し、場合によっては LCP を改善できます。「オフスクリーンの画像を保留する」監査は、このような場合に役立ちます。

画面外の画像の読み込みを遅らせる

Largest Contentful Paint の画像など、スクロールせずに見える範囲にある重要な画像は、遅延読み込みしないでください。これにより、LCP 画像の読み込みが遅れる可能性があります。「Largest Contentful Paint イメージが遅延読み込みされました」という監査で LCP 画像が誤って遅延読み込みされている場合は、Lighthouse でハイライト表示されます。

LCP 画像の遅延読み込みを避ける

CLS の貢献度を特定する

Cumulative Layout Shift は視覚的な安定性を測定する指標です。ページのコンテンツが視覚的にどれだけ移動するかを定量化します。Lighthouse には、「大規模なレイアウト シフトの回避」という、CLS のデバッグ用の監査が用意されています。

この監査では、ページの変化に最も大きく寄与している DOM 要素に焦点を当てます。左側の [要素] 列にこれらの DOM 要素のリストが表示され、右側にはそれらの CLS 全体の貢献度が表示されます。

Lighthouse の「レイアウトが大きく変わらないようにする」監査で、CLS に影響を与えている関連する DOM ノードがハイライト表示されている

Lighthouse の要素のスクリーンショットの新機能により、監査で指摘された重要な要素を視覚的にプレビューできるほか、クリックしてズームすることで見やすくすることもできます。

要素のスクリーンショットをクリックすると、その要素が展開されます

読み込み後の CLS の場合、CLS に最も貢献した要素を長方形で永続的に可視化すると有用です。これは SpeedCurve の Core Web Vitals ダッシュボードなどのサードパーティ ツールで利用できる機能です。Defaced の Layout Shift GIF Generator が気に入っている以下の機能です。

レイアウト シフト ジェネレータがシフトをハイライト表示している

レイアウト シフトの問題をサイト全体で把握するには、Search Console のウェブに関する主な指標レポートが役立ちます。これにより、CLS が高いサイト上のページの種類を確認できます(この場合は、時間をかける必要があるテンプレート部分を特定できます)。

CLS の問題が表示されている Search Console

ディメンションのない画像から CLS を識別する

寸法のない画像によって発生する累積レイアウト シフトを制限するには、画像要素と動画要素に幅と高さのサイズ属性を含めます。このアプローチにより、画像の読み込み中にブラウザがドキュメントに適切な量のスペースを割り当てることができます。

明示的な幅と高さのない画像要素の監査

画像のサイズとアスペクト比を検討する重要性については、画像の高さと幅の設定が再度重要をご覧ください。

広告からの CLS の特定

Lighthouse 向けパブリッシャー広告を使用すると、ページ上の広告の読み込みエクスペリエンスを改善する機会を見つけることができます。たとえば、レイアウト シフトの要因や、ページをユーザーが使用できるまでの時間を遅らせる可能性がある長いタスクなどです。Lighthouse では、コミュニティ プラグインで有効にできます。

リクエスト時間とレイアウトの移動を短縮できる機会をハイライト表示する広告関連の監査

ウェブ上のレイアウトの変化の原因として、広告が最大の要因の一つであることに注意してください。次の点に注意してください。

  • ビューポートの上部に固定されていない広告を配置する場合は注意する
  • 広告スロットで可能な限り大きなサイズを予約することでシフトを排除する

合成されていないアニメーションは使用しないでください

負荷の高い JavaScript タスクがメインスレッドをビジー状態にしていると、ローエンド デバイスでは、合成されていないアニメーションがジャンクが発生することがあります。このようなアニメーションは、レイアウトのずれを生む可能性があります。

Chrome でアニメーションを合成できなかったことが検出されると、Lighthouse の DevTools トレースに報告され、アニメーション付きの要素とその理由を一覧表示できます。これらは、合成されていないアニメーションを避ける監査で確認できます。

合成されていないアニメーションを避けるための監査

初回入力遅延 / 合計ブロック時間 / 長いタスクをデバッグする

初回入力は、ユーザーがページを最初に操作したとき(リンクをクリックしたとき、ボタンをタップしたとき、カスタムの JavaScript ベースのコントロールを使用したときなど)から、ブラウザがその操作に対して実際にイベント ハンドラの処理を開始できるまでの時間を測定します。JavaScript タスクに時間がかかると、この指標と、この指標のプロキシである Total Blocking Time に影響する可能性があります。

長時間のメインスレッド タスクを回避するための監査

Lighthouse では、長いメインスレッド タスクを避けるという監査を実施しています。ここには、メインスレッドで最も長いタスクが一覧表示されます。これは、入力の遅延に最も影響しているタスクを特定する際に役立ちます。左側の列には、長時間のメインスレッド タスクを担当するスクリプトの URL が表示されます。

右側には、これらのタスクの所要時間が示されます。長いタスクとは 50 ミリ秒を超えて実行される タスクのことですこれは、フレームレートや入力レイテンシに影響を与えるのに十分な時間、メインスレッドをブロックするとみなされます。

モニタリングにサードパーティ サービスを検討している場合は、これらの費用を可視化するために Calibre のメインスレッド実行タイムラインのビジュアルも非常に便利です。このタイムラインでは、インタラクティビティに影響する長いタスクに貢献している親タスクと子タスクの両方がハイライト表示されます。

メインスレッドの実行タイムラインのビジュアル カリバーには、次の要素があります。

ネットワーク リクエストをブロックして、Lighthouse で影響の変化を確認する

Chrome DevTools は、ネットワーク リクエストのブロックをサポートしており、個々のリソースが削除された場合や利用できない場合にどのような影響があるかを確認できます。これは、合計ブロック時間(TBT)や操作可能になるまでの時間などの指標に対する個々のスクリプト(サードパーティの埋め込みやトラッカーなど)のコストを理解するのに役立ちます。

ネットワーク リクエストのブロックは Lighthouse でも機能します。サイトの Lighthouse レポートを簡単に見てみましょう。パフォーマンス スコアは 63/100、TBT は 400 ミリ秒。コードを詳しく調べると、このサイトでは Chrome で Intersection Observer ポリフィルが読み込まれていることがわかります。これは不要な処理です。ブロックしましょう。

ネットワーク リクエストのブロック

DevTools の [Network] パネルでスクリプトを右クリックし、Block Request URL をクリックしてブロックできます。Intersection Observer のポリフィルについては、以下を行います。

DevTools でリクエスト URL をブロックする

次に、Lighthouse を再実行します。今回は、合計ブロック時間(400 ミリ秒 = > 300 ミリ秒)に伴い、パフォーマンス スコアが改善され(70/100)、

費用のかかるネットワーク リクエストをブロックした後のビュー

費用のかかるサードパーティの埋め込みをファサードに置き換える

動画に動画、ソーシャル メディアの投稿、ウィジェットを埋め込むには、サードパーティのリソースを使用するのが一般的です。デフォルトでは、ほとんどの埋め込みはすぐに積極的に読み込まれ、高価なペイロードが含まれる可能性があり、ユーザー エクスペリエンスに悪影響を及ぼします。サードパーティが重要でない場合(表示される前にユーザーがスクロールする必要がある場合など)は、この方法は無駄になります。

このようなウィジェットのパフォーマンスを改善するパターンの 1 つは、ユーザー操作時の遅延読み込みです。これは、ウィジェットの軽量なプレビュー(ファサード)をレンダリングし、ユーザーが操作した場合にのみフルバージョンを読み込むことで実現できます。Lighthouse には、YouTube 動画埋め込みなど、ファサードで遅延読み込みできるサードパーティ リソースを推奨する監査があります。

費用の高いサードパーティ リソースの一部を置き換えることができることを強調した監査

なお、Lighthouse では、メインスレッドを 250 ミリ秒以上ブロックしているサードパーティ コードがハイライト表示されます。これにより、あらゆる種類のサードパーティ スクリプト(Google が作成したものを含む)が公開される可能性があります。レンダリングされる内容を表示するためにスクロールが必要な場合は、デフェアリングまたは遅延読み込みを検討することをおすすめします。

サードパーティの JavaScript 監査費用を削減する

Core Web Vitals 以外

最新バージョンの Lighthouse と PageSpeed Insights では、Core Web Vitals を強調することに加え、ソースマップを有効にしている場合に JavaScript を多用するウェブ アプリケーションの読み込み速度を向上させるための具体的なガイダンスも提供しています。

たとえば、ユーザー エクスペリエンスに必要のないポリフィルや重複への依存を減らすなど、ページ内の JavaScript のコストを削減するための監査が増加しています。

ウェブに関する主な指標のツールの詳細については、Lighthouse チームの Twitter アカウントと DevTools の最新情報をご覧ください。

Mercedes Mehling 氏によるヒーロー画像Unsplash より)。