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

並行レンダリング とは?

最終更新:
💡 画面更新を中断し、急ぐ入力を先に反映する

ReactがUI更新のレンダリングを中断・再開したり、不要になった作業を破棄したりできる仕組み。Transitionなどを使う更新で、急ぐ入力の反映と後回しにできる画面更新を分けられる。

📌 このページのポイント
後回しの画面更新に、入力が割り込む時間の流れ →(模式図・実測ではない)Transition:検索結果の更新を準備中断急ぐ更新入力を反映新しい入力に合わせ結果の更新を続ける古いレンダリングは破棄することもある準備後に表示へ反映。途中の画面は出さない任意の長い計算を別スレッドへ移す機能ではない
検索欄と結果の更新を分けた模式図です。矢印は後回しのレンダリングを中断し入力更新を扱うことを示します。時間や性能は実測値ではなく、いつでも入力が即時に反映される保証ではありません。
ひよこ ひよこ
並行レンダリングって、画面を同時に描くの?
ペンギン先生 ペンギン先生
ReactがUIの更新を準備する作業を、中断して別の更新を先に扱える仕組みだよ。後で続きを進めることも、古くなった作業を破棄することもある。途中まで計算した画面を、そのまま半分だけ表示するという意味ではないんだ
ひよこ ひよこ
入力が止まりにくくなるの?
ペンギン先生 ペンギン先生
例えば検索入力はすぐ反映し、結果一覧の更新は後回しにできる。Reactは後回しにしたレンダリングを中断して、入力の更新を扱えるよ。ただし、任意の長い計算を自動で分割するわけではないので、どんな重い処理でも必ずスムーズになるとは言えないんだ
ひよこ ひよこ
useTransitionで何を指定するの?
ペンギン先生 ペンギン先生
startTransitionの中で行う状態更新を、急がないTransitionとして扱えるよ。検索欄の文字自体は通常の更新にして、結果用の状態更新をTransitionにする。useDeferredValueで値の反映を遅らせる方法もある。startTransitionのコールバックそのものは、呼び出したときに実行されるんだ
ひよこ ひよこ
Suspenseは通信を自動で待ってくれる?
ペンギン先生 ペンギン先生
Suspense対応のデータ取得やコード読み込みに対して、待っている間の表示を指定するものだよ。どんなfetchも自動で検出するわけではない。Transitionと組み合わせて、次の表示を準備する間に現在の内容を残すといった使い方ができるんだ
ひよこ ひよこ
React 18に上げたら全更新が並行になる?
ペンギン先生 ペンギン先生
全てが自動で変わるわけではないよ。React 18ではcreateRoot、サーバー描画した画面ではhydrateRootを使い、Transitionなどの並行機能を段階的に利用する。対応するフレームワークが利用することもある。別スレッドでCPU処理を走らせる並列処理とは区別しよう
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「並行レンダリング」って出てきたら「画面更新を中断して、急ぐ入力を先に反映できるReactの仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Concurrent Rendering」 = 並行レンダリング
💬 Concurrentは「並行」の意味。複数の更新の作業を時間的に重ねて進めることで、急ぐ更新を先に扱える。別のCPUやスレッドで同時に計算する並列処理とは区別するよ

参考資料

← 用語集にもどる