選択的ハイドレーションによるプログレッシブハイドレーション
React 18の選択的ハイドレーションを使い、ユーザーが最初に操作するコンポーネントのハイドレーションを優先します。
「選択的ハイドレーションによるプログレッシブハイドレーション」はCoddyKit上の無料React Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
選択的ハイドレーションとは
選択的ハイドレーションは React 18 の機能で、ページ全体の JavaScript のダウンロードを待たず、JavaScript コードが到着したコンポーネントからハイドレーションを開始できます。コード分割された各セクションは、すべて一度にではなく、バンドルの読み込みに合わせてハイドレーションされます。
React 18:一斉ハイドレーションの廃止
React 18 より前は、ハイドレーションは「すべてかゼロか」でした。React はすべての JavaScript をダウンロードし、ツリー全体をハイドレーションしてからでなければ、ページのどの部分もインタラクティブにできませんでした。React 18 ではこの制約がなくなり、コードとデータが利用可能になった部分からツリーを独立してハイドレーションできます。
ユーザー操作によるハイドレーションの優先
まだハイドレーションされていない Suspense 境界をユーザーがクリックまたは操作すると、React は他の保留中のハイドレーション処理よりも先に、そのサブツリーのハイドレーションを直ちに優先します。これにより、ドキュメント内の順序に関係なく、ユーザーが使おうとしている部分を最初にインタラクティブにできます。
コード分割のための React.lazy と Suspense
React.lazy と動的インポート、Suspense 境界を組み合わせると、コード分割されたコンポーネントで選択的ハイドレーションを利用できます。ブラウザは最初にメイン JS バンドルをダウンロードし、シェルを直ちにハイドレーションします。各遅延読み込みコンポーネントは、ブラウザがチャンクを取得すると順次ハイドレーションされます。
ユーザー体験への影響
その結果、ファーストビューのコンテンツは、ファーストビューより下の JavaScript がダウンロードされる前にインタラクティブになります。コメントフィードとレコメンデーションウィジェットがまだ JavaScript チャンクを読み込んでいる間でも、ユーザーはナビゲーションやヒーローの CTA を操作できます。
効果を測定する
選択的ハイドレーションは、ハイドレーションのパフォーマンスにおける重要な指標である Total Blocking Time(TBT)を短縮します。Chrome DevTools の Performance タブでは、Long Tasks(50ms を超えるタスク)が赤色で強調表示されます。選択的ハイドレーションの導入前は、ハイドレーション全体による 300ms の Long Task が 1 つ表示されることがあります。導入後は、時間をずらして実行される小さなタスクが複数表示されます。
トップレベルの eager import を避ける
選択的ハイドレーションを損なうアンチパターンは、アプリの先頭ですべてのコンポーネントをインポートすることです。たとえば、import Footer from './Footer' です。これにより、ハイドレーションが始まる前に、ブラウザは Footer のコードをダウンロード、解析、実行することになります。ファーストビューより下にあるコンポーネントのトップレベルインポートを、React.lazy と動的インポートに置き換えてください。
ファーストビューより下のコンテンツへの動的インポート
初期ビューポートより下に表示されるコンポーネントには、const Footer = React.lazy(() => import('./Footer')) を使用します。それらをシンプルなフォールバックとともに Suspense で囲みます。ブラウザはファーストビューのハイドレーションが完了するまで Footer のバンドル取得の優先度を下げるため、TBT が自然に改善されます。
ストリーミングと選択的ハイドレーションの連携
ストリーミングと選択的ハイドレーションは相補的な技術です。ストリーミングは HTML チャンクを送信して FCP と LCP を改善し、選択的ハイドレーションは JavaScript チャンクを処理して TTI と TBT を改善します。両者を組み合わせることで、「コンテンツをすぐに表示する」と「すぐに操作可能にする」という、パフォーマンスにおける両方の側面に対応できます。
選択的ハイドレーションと React Server Components
React Server Components は選択的ハイドレーションをさらに推し進めます。サーバーコンポーネントはクライアント向けの JavaScript を一切生成しません。ハイドレーションが必要なのは、「use client」でマークされたクライアントコンポーネントだけです。ハイドレーションが必要な JavaScript の総量が減るため、選択的ハイドレーションの効果がさらに高まります。
実践的な選択的ハイドレーションのアーキテクチャ
実践的なパターンは、ストリーミング HTML に renderToPipeableStream を使い、createRoot ではなくルートの hydrateRoot 呼び出しでページをラップしてハイドレーションモードを有効にし、ファーストビューより下のすべてのセクションに React.lazy を使い、各セクションを Suspense 境界で囲むことです。残りは React が自動的に処理します。
ユーザー操作と選択的ハイドレーション
React 18 では、ユーザー操作は選択的ハイドレーションの優先度にどのような影響を与えますか?
レッスンのまとめ
選択的ハイドレーションを使うと、完全なバンドルを待つのではなく、JavaScript が到着したコンポーネントのサブツリーから React が段階的にハイドレーションできます。ユーザー操作は、対象となるサブツリーのハイドレーションを優先します。ファーストビューより下のコンテンツに React.lazy と動的インポートを使い、Suspense 境界と組み合わせることで、この段階的なパターンを実現できます。選択的ハイドレーションとストリーミング SSR は相補的な技術であり、コンテンツ配信とインタラクティブ性のパフォーマンスの両方に対応します。
よくある質問
「選択的ハイドレーションによるプログレッシブハイドレーション」レッスンは無料ですか?
はい。「選択的ハイドレーションによるプログレッシブハイドレーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「選択的ハイドレーションによるプログレッシブハイドレーション」で何を学びますか?
React 18の選択的ハイドレーションを使い、ユーザーが最初に操作するコンポーネントのハイドレーションを優先します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「選択的ハイドレーションによるプログレッシブハイドレーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- React 18のストリーミング:renderToPipeableStreamの仕組み
- Suspense境界とストリーミングの優先度
- 選択的ハイドレーションによるプログレッシブハイドレーション
- ストリーミングの効果を測定する:FCP、TTI、LCP