【へいこうレンダリング】

並行レンダリング とは?

公開:
💡 電話しながら料理できる、マルチタスクなReact
📌 このページのポイント
並行レンダリング — 優先度制御 従来(同期) 並行レンダリング 重いレンダリング(途中で止められない) ユーザー入力 ⏳ 待機中… UI がフリーズ 高優先度: ユーザー入力を即処理 リスト描画① 割込 リスト描画②(再開) startTransition で低優先度に指定 結果 入力するたびにUIがカクつく ユーザー体験が悪化 結果 入力は常にスムーズ 重い処理はバックグラウンドで継続 時間 → 時間 →
並行レンダリングで重い処理を中断し、ユーザー入力を優先するイメージ
ひよこ ひよこ
ペンギン先生、React 18で「並行レンダリング」が来たって聞いたんだけど、今まで並行じゃなかったの?
ペンギン先生 ペンギン先生
React 17以前のレンダリングは「同期的」だったんだよ。一度始めたら途中で止められなくて、重い処理があるとその間ずっとブラウザが固まってしまっていたんだ。
ひよこ ひよこ
それって入力フォームが固まるやつ?
ペンギン先生 ペンギン先生
そうだよ。例えば大量のリストをレンダリングしている最中にキーボードを打っても、レンダリングが終わるまで文字が表示されない問題があったんだ。並行レンダリングは「レンダリングを中断して、先にユーザー入力を処理する」ことを可能にするよ。
ひよこ ひよこ
どうやって優先度を決めるの?
ペンギン先生 ペンギン先生
useTransitionフックが重要だよ。startTransitionで囲んだ更新は「低優先度」としてマークされるんだ。例えば検索フォームの入力は高優先度、検索結果の表示は低優先度にすると、タイプしながらリストが更新されてもカクつかない体験が作れるんだね。
ひよこ ひよこ
Suspenseとはどう関係があるの?
ペンギン先生 ペンギン先生
Suspenseはデータ取得中の「待ち状態」を宣言的に書ける仕組みで、並行レンダリングと組み合わせると強力なんだ。コンポーネントレンダリングをデータが揃うまで「一時停止」して、準備できたら再開するという流れを自然に書けるようになるよ。
ひよこ ひよこ
React 18に上げるだけで自動で使えるの?
ペンギン先生 ペンギン先生
ReactDOM.renderからReactDOM.createRootに移行する必要があるよ。ただしほとんどの既存コードはそのまま動くし、並行機能はオプトインで使う設計になっているんだ。useTransitionやuseDeferredValueを意識的に使って初めて恩恵が出るから、ユーザー体験のどこがボトルネックかを見極めてから導入するのが効果的だよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「並行レンダリング」って出てきたら「Reactが重い処理を中断して、ユーザー入力を優先する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Concurrent Rendering」 = 並行レンダリング
💬 「Concurrent(並行)」はコンピュータ科学で「複数の処理を時間的に重なるように進める」意味で使われるよ。React Fiberアーキテクチャの刷新によって実現できるようになったんだよ
← 用語集にもどる