「WEB+DB PRESS Vol.106」を読みました。
- 作者: 成田元輝,杉浦颯太,小和瀬塁,山中大輔,末田正樹,藤野真聡,竹馬光太郎,桑原仁雄,倉長拓海,牧大輔,秋山卓巳,前田雅央,星北斗,末永恭正,久保田祐史,池田拓司,はまちや2,竹原,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2018/08/24
- メディア: 単行本
- この商品を含むブログを見る
特に面白かったのが仮想DOM特集です。例えば、jQueryがReactと相性がよくないという事実は知っていたのですが、深く追求した事はなかったので、色々と発見がありました。
特に私は普段からReactを使っているので、その仕組みを深く理解する事が出来た点でも、読んでよかったと思います。
自分なりの理解として、備忘録をまとめていきます。
目次
- 目次
- HTMLを動的に制御するAPIこそがDOMである
- 仮想DOMがもたらすメリット
- リアルDOMの変更は1対1の変更を壊す
- 仮想DOMは様々な分野に適用できる
- Fluxによる状態の一元管理
- さいごに
HTMLを動的に制御するAPIこそがDOMである
私は、DOM(Document Object Model)はHTMLの各要素(divとかspan)そのものを指しているという認識でいました。
実は、DOMとはHTMLを動的に制御するためのAPIなのです。つまり、DOMというAPIを経由して操作することによって、現在のブラウザ上のJavaScriptは成り立っています。
仮想DOMがもたらすメリット
実際にブラウザに出力されているDOMをリアルDOMとするならば、仮想DOMはそれを仮想で再現しています。ここでは、リアルDOMと仮想DOMが1対1で対応していることが重要です。
仮想DOMは実際に出力されるわけではないのですが、単なる木構造の構造体なので、変化させるのが簡単です。例えば、Reactは仮想DOMを変化させてみることで、変化を捕捉しています。
コストの低い仮想DOMの変更で差分を検知し、最小限の変更をRealDOMに加えることこそ、仮想DOMがもたらすメリットなのです。
リアルDOMの変更は1対1の変更を壊す
例えばjQueryは、実際にブラウザに出力されているリアルDOMを操作します。これが何を意味しているかと言うと、仮想DOMとリアルDOMの1対1の関係性が壊れてしまうのです。
適切な関係性が壊れてしまうと、仮想DOMが検知した差分を、正しくリアルDOMに反映させる事ができません。ReactがjQueryと相性が悪いのは、そのような理由があったからなのです。
仮想DOMは様々な分野に適用できる
仮想DOMはあくまで木構造の構造体なので、ブラウザに依存しているわけではありません。
仮想空間で変更を検知し、最小限の変更をリアルに加えるというアプローチは、様々な分野において応用ができます。例えば、Reactは数多くの分野に裾野を広げています。
- React native(モバイルアプリ)
- React 360(VR)
仮想DOMによって検知した差分を、実際にリアルへと反映する仕組みがレンダラー(Renderer)です。つまり、レンダラーの種類を増やせば良いのです。
GoogleのFlutterもReactにインスパイアされており、似たような構成を採用しています。これら、プラットフォームに依存しない応用の効く構成にする事で、Android/iOSへのコードがワンソースで書ける実装を実現しているのです。
Fluxによる状態の一元管理
フロンエンドJSは、表現の幅が広がったことで拡大を見せています。サーバーサイドでやっているようなMVC構成を、フロンエンドJSで作ることすらできます。
私も素のReactで開発してきましたが、コンポーネントが増えてくると、各コンポーネントが状態(state)を持つため状態制御が複雑になります。
そこで、全ての状態を1箇所に集約する事で、一元管理してしまおうというアプローチこそがFluxです。状態が変われば仮想DOMは大元から作り直しとなりますが、最小限の変更だけ反映するように最適化されていれば、高いコストにはなりません。
一元管理になりますので、データの変更は、各コンポーネントから全て単方向に依頼する形となります。この単方向のアーキテクチャこそがFluxであり、各コンポーネントが状態を持つ複雑な構成を避けることが可能になりました。
ちなみに、私も純粋なFluxではないですが、Reduxについて勉強しました。その内容は以前の記事にも書いてあります。単方向アーキテクチャの概念自体はシンプルな考え方であり、とても感動しましたよ!
さいごに
このように、仮想DOMを活用することで、高速な差分の検知と最小限のコストによって、RealDOMを制御する事ができます。
この概念を理解しておけば、Reactの各コンポーネントがrenderによって何を実現しようとしているのかが、よく分かります。
- stateが書き換えられた
- 書き換えられたstateで仮想DOMを再構成する
- 前回の状態との差分を比較してみる
- 変更があれば、変わった部分だけを実DOMへと反映する
ぜひ「WEB+DB PRESS Vol.106」を読んでみてください。@mizchiさんの熱い仮想DOM魂が詰まっていて、かなり面白かっです。
仮想DOMを足がかりにして、仮想DOMが目指している本質を知ることができる内容でしたよ!
- 作者: 成田元輝,杉浦颯太,小和瀬塁,山中大輔,末田正樹,藤野真聡,竹馬光太郎,桑原仁雄,倉長拓海,牧大輔,秋山卓巳,前田雅央,星北斗,末永恭正,久保田祐史,池田拓司,はまちや2,竹原,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2018/08/24
- メディア: 単行本
- この商品を含むブログを見る