見出し画像

仮想DOM学習のまとめ

なぜ仮想DOMなのか?

vueの学習を始めた初日、V-NODEや仮想DOMの話に出くわしたのですが、その話がすごい面白くて、詳しく調べてみたので、今回まとめを記載することにしました。

私はDOMについての知識もいい加減だったので、いい機会なのでそちらについても調べて、忘れないようにまとめてみようと思います。

あくまで初心者なのでざっくりまとめています。間違いがあれば教えていただきたいです。

DOMってなに?

簡潔に説明すると、

ブラウザで受け取ったHTMLを操作するためのオブジェクト(的な物)。

なぜ(的な物)とつけたかというと、DOMは色々な機能や規則が詰まっている集合体のため、一概にどんな物と言えないようです。そのため今回は便宜上オブジェクト(的な物)として例えました。

また、DOM(Document Object Modelの略)の略称で、Documentオブジェクトを通して、Webブラウザの操作や情報取得ができます。

Documentオブジェクトとは?

Documentオブジェクトとは、 Windowオブジェクト内にあるオブジェクトの一つ。

 ・Windowオブジェクト:ブラウザの全ての情報を保持しているオブジェクトで、ブラウザそのもの。

・Documentオブジェクト:Windowオブジェクト内に存在し、受け取った現ブラウザのHTML情報の保持を担当している。現在開いているWEBページの情報そのもの。

このDocumentオブジェクトは検証で確認すると、ツリー構造という家系図のような構造になっており、DOMツリーと呼ばれます。

DOMの動き(WEBページを開いた時)

HTMLとJavaScriptのソースコードを書き、WEBページで開くと以下のような挙動をします。

1、ブラウザ(Chromeやfirefoxなど)がHTMLを読み込む

2、HTMLを元にDOMツリーを構築

3、ブラウザがJSを読み込み、nodeのメソッドやプロパティからDOMを操作

4、Documentオブジェクト内のDOMツリーを構築

5、変更されたHTMLをブラウザが読み込む

6、ブラウザに反映

この挙動は全てブラウザ内で行われます。これが、この先に説明する仮想DOMが存在する理由になってきます。

nodeとは?

nodeとは、DOMツリー(Documentオブジェクト)を構成する各オブジェクトたちです。長くなるので詳しくは書きませんが、家系図みたいな構造でWEB情報を表現しています。

このオブジェクトたちのプロパティやメソッドを通して、 JavaScriptはWEBページ内の情報を取得・保存・操作を行います。

じゃあ、仮想DOMって何なのか?

仮想DOMはその名の通り、仮想のDOMです。

詳しく説明すると、WEBページを開くとき、Vueは内部に仮想DOMを構築してからブラウザにアクセスします。その内部に構築したDOMのことを仮想DOMと呼びます。

なぜ仮想DOMが必要なのか?

結論から書くと、仮想DOMを使うと処理や負荷が減るためです。

先ほどの通常のDOMの動きだと、JavaScriptで変更がある度にDOMはHTMLを読み込んで何度も一から再構築されます。その動きのコストを減らす仕組みが仮想DOMです。

負荷を減らす、仮装DOMの動き

以下は、JavaScriptに変更を加えて、WEBブラウザを更新するときの仮装DOMの動きです。

1、仮装DOMを二つ構築

2、1の一つをJavascriptで変更を加えて再構築

3、2と変更していない本物のDOMコピーとの差分を出す

4、差分のみ本物のDOMへ渡す

このように差分のみ渡すので、本物のDOMを用いて一からDOMを構築する動作するときよりも、負荷を小さくする事が可能になります。

まとめ

簡単に今回の流れをまとめると、

DOMはDocumentオブジェクトのことで、Documentオブジェクトは一つ一つのnodeによって家系図のような構造で構築されている。

そのnodeを通してJSはHTMLの操作や情報取得をしている。

仮想DOMはVue内でコピーDOM内で操作を行い、真DOMとの差分だけをブラウザに渡すので、負荷の少ない仕組みを可能にしている。

最後に

DOMについてかなり調べたので理解した気になっていたのですが、いざ説明しようとすると難しかったです。特にDOMのことを何と表現したらいいのかかなり悩みました。

これからvueを扱いながらもっと深く理解して、知識をブラッシュアップしていけたらいいなと思います。

この記事が気に入ったらサポートをしてみませんか?