Suspense境界とストリーミングの優先度
Suspense境界を配置し、どのHTMLチャンクを先にストリーミングするか、フォールバックをいつコンテンツに置き換えるかを制御します。
「Suspense境界とストリーミングの優先度」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
ストリーミングを分割する Suspense
Suspense 境界は、ストリーミングの粒度を決める基本単位です。コンポーネントツリー内の各 Suspense 境界は、独立してストリーミングできるセクションを作成します。React は他の境界の状態に関係なく、各境界をそれぞれのペースで解決してストリーミングできます。
シェル:高速で同期的なコンテンツ
シェルは、Suspense 境界の外側にあるすべての要素で構成されます。レイアウト、ナビゲーション、フッター、そして同期的に利用できるコンテンツなどです。シェルは最初に高速でストリーミングされるため、データに依存するセクションがバックグラウンドで読み込まれている間も、ユーザーはすぐにページの構造を確認できます。
初期 HTML に含まれるフォールバック
React がシェルをストリーミングするとき、データがまだ利用できない Suspense 境界は、フォールバック UI としてレンダリングされます。通常はローディング用のスケルトンやスピナーです。このフォールバックは初期 HTML レスポンスに含まれるため、ユーザーは空白ではなく、すぐに読み込みインジケーターを確認できます。
フォールバックの解決と置き換え
Suspense 境界のデータが解決されると、React は解決済みの HTML と小さなインラインスクリプトをストリーミングします。そのスクリプトは、新しくストリーミングされたコンテンツを非表示の template 要素から DOM の正しい位置へ移動し、ページ全体を再読み込みすることなくフォールバックを置き換えます。
インラインスクリプトのパターン
React は HTML の template 要素を使うパターンを採用しています。解決済みの Suspense コンテンツを非表示の template にストリーミングし、その後スクリプトが React の内部関数を呼び出して、template のコンテンツを DOM の正しい位置に入れ替えます。これにより、追加の JS フレームワークコードなしで DOM を置き換えられます。
ネストした Suspense:独立したタイムライン
ネストした Suspense 境界には、それぞれ独立した解決のタイムラインがあります。内側の Suspense 境界は外側の境界より先に解決することがあり、外側の境界が解決済みかどうかに関係なく、React は内側のコンテンツを準備でき次第ストリーミングします。これにより、データ読み込みの並列性が最大化されます。
配置戦略:何をどこに置くか
効果的な Suspense の配置では、時間のかかるデータ依存コンポーネントを Suspense 境界の内側に置き、高速で静的、または同期的に利用できるコンテンツを外側に置きます。ナビゲーションバー、静的なテキストを含むヒーローセクション、フッターは外側に配置します。商品一覧、ユーザーダッシュボード、コメントフィードは内側に配置します。
ストリーミングの順序:必ずしもドキュメント順ではない
React は Suspense 境界が解決した順にストリーミングするため、必ずしもドキュメント内の順序になるとは限りません。必要なデータが少なければ、ファーストビューより下のセクションがファーストビューのセクションより先に解決することもあります。ストリーミングの順序に関係なく、React は DOM への挿入を正しく処理します。
優先度ヒントとユーザー操作
React 18 の選択的ハイドレーションはユーザー操作に応答します。まだハイドレーションされていない Suspense 境界をユーザーがクリックまたはホバーすると、React はその境界のハイドレーションを最優先します。これにより、ページの他の部分がまだハイドレーション中でも、ユーザー操作にすぐ応答できます。
細かすぎる境界を避ける
Suspense 境界を増やすとストリーミングの柔軟性は高まりますが、多すぎるとインラインの置き換えスクリプトによるオーバーヘッドが増加します。実用上の目安として、個々のコンポーネントではなく、「セクション」全体(ファーストビューのコンテンツ、サイドバー、ファーストビューより下のフィード)を囲みます。1~3 個の Suspense 境界をページごとに配置するのが、一般的にバランスのよい範囲です。
Chrome DevTools でストリーミングの効果を測定する
Chrome DevTools の Network タブで「Preserve log」を使用し、レスポンスのストリーミングを観察します。HTML ドキュメントがチャンク単位で大きくなっていくことを確認できます。Performance タブには FCP と LCP のマーカーが表示されるため、ストリーミング版と非ストリーミング版のビルドを比較して改善効果を数値化できます。Fast 3G にスロットルすると、効果をより明確に確認できます。
ストリーミング HTML における Suspense フォールバック
ストリーミングされる初期 HTML レスポンスでは、Suspense 境界のフォールバックはどうなりますか?
レッスンのまとめ
Suspense 境界は、React ツリーを独立してストリーミングできるセクションに分割します。シェル(Suspense の外側)が最初にストリーミングされ、保留中の境界にはフォールバックがすぐに表示され、解決済みのコンテンツがインラインスクリプトによってフォールバックと置き換えられます。ネストした境界には独立したタイムラインがあります。最適なストリーミング粒度を得るには、セクション単位で境界を配置し、操作を起点とするハイドレーションの順序は React の優先度システムに任せてください。
よくある質問
「Suspense境界とストリーミングの優先度」レッスンは無料ですか?
はい。「Suspense境界とストリーミングの優先度」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「Suspense境界とストリーミングの優先度」で何を学びますか?
Suspense境界を配置し、どのHTMLチャンクを先にストリーミングするか、フォールバックをいつコンテンツに置き換えるかを制御します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Suspense境界とストリーミングの優先度」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- React 18のストリーミング:renderToPipeableStreamの仕組み
- Suspense境界とストリーミングの優先度
- 選択的ハイドレーションによるプログレッシブハイドレーション
- ストリーミングの効果を測定する:FCP、TTI、LCP