仮想DOM差分検出 Virtual DOM diffing
Reactが広めた手法。UIをメモリ上の軽量な「仮想」DOMツリーとして記述し、変更時に新しいツリーを作って古いものと比較(diff)することで、本物の(高コストな)DOMには差分だけを適用する。リコンシリエーション(reconciliation)とも呼ばれる。
理由は、本物のDOMに触れるのは高コストで、何を更新すべきかを手作業で正確に追うのは間違いやすいからだ。Reactの解決策は、変更のたびにコンポーネントを新しい仮想ツリーに再描画し、前回のものと比較して、必要最小限のDOM操作を割り出すことである。リストではkeyが、差分アルゴリズムによる要素の対応付けを助ける。
トレードオフとして、差分検出自体が仕事になる。大きなツリーや頻繁に更新されるツリーではボトルネックになりうる(React Fiberはメインスレッドを塞がないようタイムスライシングを導入した)。現代の反論はシグナルや、Svelteのようなコンパイラ方式で、仮想DOMを使わずに変わった箇所だけを直接更新し、多くの場合より速い。差分検出かシグナルかは、フロントエンドの中心的な論争だ。2010年代のフレームワークを象徴する手法である。