仮想DOMとは何ですか?

過去1年間、Virtual DOMとReact JSについて多くのことを聞いてきました。

Reactは非常に高速で非常にシンプルですが、どのように機能しますか? 仮想DOMとは何ですか? なぜこれを心配する必要があり、古き良きレギュラーDOMに何が起こったのですか?



DOMとは



仮想DOMとは何かを詳しく説明する前に、実際のDOMとは何かについて話しましょう。



DOM(Document Object Modelの略)は、オブジェクトを使用して構造文書を表す方法です。 これは、HTML、XMLなどのデータの表示および相互作用に関する、クロスプラットフォームで言語に依存しない契約です。



WebブラウザーはDOMのコンポーネントを処理し、JavaScriptとCSSを使用してコンポーネントと対話できます。 ドキュメントノードの操作、データの変更、新しいノードの削除と挿入ができます。 現在、DOM APIは実質的にクロスプラットフォームおよびクロスブラウザです。

それで問題は何ですか?



DOMの問題



DOMの主な問題は、動的ユーザーインターフェイス(UI)を作成するように設計されていないことです。 JavaScriptとjQueryのようなライブラリを使用して作業できますが、それらを使用してもパフォーマンスの問題は解決しません。

Twitter、Facebook、Pinterestなどの最新のソーシャルネットワークをご覧ください。

少しスクロールすると、何万ものDOMノードが作成され、効果的に相互作用しますが、これは簡単な作業ではありません。



たとえば、1000 divブロックを5ピクセル左に移動してみてください。

1秒以上かかる場合があります-現代のインターネットには多すぎます。 スクリプトを最適化していくつかのトリックを使用することもできますが、最終的には、巨大なページと動的UIを操作するときに頭痛の種になるだけです。



この問題を解決できますか? できるようです。

W3Cは現在、新しいShadow DOM標準に取り組んでいます。

Shadow DOMは、W3C標準のワーキングドラフトです。 複数のDOMツリーを1つの階層に結合する方法と、これらのツリーがドキュメント内で相互作用する方法を記述する仕様。これにより、DOMをより適切に組み立てることができます。



別のオプションは、仮想DOMでアプローチを使用することです。

仮想DOMは標準ではなく、最終的にはまだDOMとやり取りしていますが、できる限り少なく効率的に行います。



仮想ドーム



DOMと直接対話する代わりに、その軽量コピーを使用します。 必要に応じてコピーに変更を加えてから、実際のDOMに変更を適用できます。

この場合、DOMツリーはその仮想コピーと比較され、差異が決定され、変更されたものの再描画が開始されます。



このアプローチは、実際のDOMのすべての重い部分を含まないため、より高速に機能します。

しかし、私たちが正しいことをした場合のみです。 2つの問題があります。DOMを正確に再描画するタイミングと、それを効率的に行う方法です。



いつ?

データが変更され、更新が必要な場合。

データが変更されたかどうかを確認するには、2つのオプションがあります。



どうやって?

このアプローチを本当に高速にしているもの:



ご存知のように、これはそれほど単純ではなく、実装はかなり複雑になることがありますが、このアプローチをプロジェクトに実装するのに役立つライブラリがいくつかあります。

これらの最も有名なライブラリの1つは、Facebook開発チームのReactです。



React JS



React JSは、仮想DOMを使用するというアイデアを広めたユーザーインターフェイスを作成するためにFacebookによって開発されたJavaScriptライブラリです。 ReactはJavaScriptオブジェクトから軽量ツリーを作成し、DOMツリーをシミュレートします。 次に、それらからHTMLを作成します。これは、目的のDOM要素に挿入または追加され、ブラウザでページが再描画されます。

Reactはフレームワークではなくライブラリであるため、AngularまたはEmberとの比較は正しくありません。



その他のライブラリとフレームワーク







おわりに



仮想DOMは、DOMツリーを模倣する軽量のJavaScriptオブジェクトを操作することでDOMとの直接的な作業を回避することにより、クライアント側のパフォーマンスを向上させる手法およびライブラリ/アルゴリズムのセットです。



仮想DOMを使用するというアイデアは素晴らしいものですが、新しいものではありません-DOMとの直接的な作業には費用がかかることを長い間知っています。 Reactのようなライブラリを使用して、アプリケーションのパフォーマンスを改善し、非常にシンプルにすることができます。



翻訳者から



元の記事: 仮想DOMとは

注:転送中、一部の自由は許可されますが、合理的な範囲内です。



All Articles