React Academy · レッスン

ストリーミングの効果を測定する:FCP、TTI、LCP

LighthouseとWebPageTestを使い、ストリーミングSSRとブロッキングSSRの実環境での性能差をベンチマークします。

レッスン 4/413 ステップ

「ストリーミングの効果を測定する:FCP、TTI、LCP」はCoddyKit上の無料React Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

FCP:First Contentful Paint

FCP は、ナビゲーション開始から最初のコンテンツ(テキスト、画像、背景)が画面に描画されるまでの時間を測定します。ストリーミングでは HTML シェルがすぐに送信されるため、最初のチャンクが届くとすぐに、ブラウザはレイアウト、ナビゲーション、ファーストビュー内のテキストを描画できます。

ストリーミングによる FCP の改善

同期的な SSR(renderToString)では、レンダリング全体が完了するまでブラウザに HTML が届きません。ストリーミングでは、リクエストから数ミリ秒以内に HTML シェルがブラウザへ届き、レイアウトと静的コンテンツがほぼすぐに表示されるため、FCP が大幅に短縮されます。

LCP:Largest Contentful Paint

LCP は、ビューポート内で最も大きな表示要素が描画される時点を測定します。通常はヒーロー画像や大きな見出しです。LCP の要素がシェルの一部であり、Suspense 境界の内側にない場合、シェルはデータ依存のセクションより先にストリーミングされるため、ストリーミングによって LCP が改善されます。

LCP の要素をシェルに含める

重要な最適化は、LCP の要素、つまりヒーローセクション、メイン見出し、注目画像などを Suspense 境界の外側に配置することです。LCP の要素がデータを待つ Suspense 境界の内側にある場合、そのデータが解決されるまでストリーミングは LCP の改善に役立ちません。

TTI:Time to Interactive

TTI は、ページがユーザー入力に確実に応答できるようになる時点を測定します。つまり、メインスレッドをブロックする Long Tasks がない状態です。ストリーミングと選択的ハイドレーションを組み合わせると、すべての JavaScript のダウンロード後に大きな同期ハイドレーションタスクを 1 つ実行するのではなく、ハイドレーション処理を時間的に分散できるため、TTI が短縮されます。

TTFB:ストリーミングで解決できないこと

Time to First Byte(TTFB)は、最初のバイトが送信される前のネットワーク遅延とサーバー処理時間によって決まります。ストリーミングによって TTFB が変わることはありません。この部分にはエッジレンダリングが役立ちます。ストリーミングで FCP を改善するには、まず TTFB を低くする必要があります。そうでなければ、低速なオリジンからストリーミングしているだけです。

ストリーミング分析のためのWebPageTest

WebPageTestのフィルムストリップビューでは、ページの読み込み中に100msごとに撮影された一連のスクリーンショットを確認できます。ストリーミング対応ページでは、最初にレイアウトが表示され、その後セクションが段階的に埋まっていきます。ストリーミング非対応のページでは、空白の画面が表示された後、完全にレンダリングされたページが突然表示されるため、視覚的な違いが明確に分かります。

ストリーミングベンチマークの設定

意味のあるベンチマークでは、同じページを2通りの方法でレンダリングして比較します。Next.js RSCのストリーミングを有効にした場合と、従来の同期SSRを使用した場合です。固定したネットワーク条件(例:Fast 3G、4x CPU slowdown)でWebPageTestを実行し、統計的な信頼性を確保するため、3回のテスト実行でFCP、LCP、TTIの指標を比較します。

DevToolsでのネットワークスロットリング

Chrome DevToolsのNetworkタブには、Fast 3GやSlow 4Gなどのプリセットを選択できる「Throttling」ドロップダウンがあります。Fast 3G(1.6 Mbps、150ms RTT)では、HTMLドキュメント全体のダウンロード時間が長くなるため、ストリーミングと非ストリーミングの違いが強調され、段階的なストリーミングによる改善を確認しやすくなります。

INP:最も重要な指標

Interaction to Next Paint(INP)は、ユーザーが何らかの操作をしてから次の描画が行われるまでの時間を測定します。2024年に、Core Web Vitalの1つとしてFIDに取って代わりました。ストリーミングでは、ユーザーが最初に操作する可能性の高いインタラクティブなコンポーネントのハイドレーションを優先することでINPを短縮し、それらのコンポーネントが応答可能になるまでのブロッキング時間を減らします。

ストリーミングとエッジレンダリングの組み合わせ

最も効果の高い構成は、エッジレンダリング(近くのPoPによる低いTTFB)、ストリーミング(HTMLの段階的な配信)、選択的ハイドレーション(JavaScript処理の段階的な実行)を組み合わせるものです。この3つの技術により、読み込みの全ライフサイクルにおける主要なパフォーマンス指標をすべて最小限に抑えられます。

ストリーミングが最も改善する指標

Reactのストリーミングがファーストビューのコンテンツに対して最も直接的に改善するパフォーマンス指標はどれですか?

レッスンのまとめ

ストリーミングはHTMLのシェルをすぐに配信することでFCPを最も直接的に改善し、LCP要素がシェルに含まれている場合はLCPも改善します。選択的ハイドレーションによってJavaScriptの処理を時間に分散できるため、TTIも改善します。TTFBは変わらないため、エッジレンダリングで対処します。WebPageTestのフィルムストリップとChrome DevToolsのスロットリングを使ってストリーミングの効果を測定し、Core Web Vitalsではインタラクティビティの主要指標であるINPを最適化します。

無料で開始

AI チューターと学ぶ React — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
88
レッスン
324

よくある質問

「ストリーミングの効果を測定する:FCP、TTI、LCP」レッスンは無料ですか?

はい。「ストリーミングの効果を測定する:FCP、TTI、LCP」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「ストリーミングの効果を測定する:FCP、TTI、LCP」で何を学びますか?

LighthouseとWebPageTestを使い、ストリーミングSSRとブロッキングSSRの実環境での性能差をベンチマークします。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「ストリーミングの効果を測定する:FCP、TTI、LCP」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. React 18のストリーミング:renderToPipeableStreamの仕組み
  2. Suspense境界とストリーミングの優先度
  3. 選択的ハイドレーションによるプログレッシブハイドレーション
  4. ストリーミングの効果を測定する:FCP、TTI、LCP
← React Academyに戻る