Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
仮想DOMで探る、Reactがヒットした 理由 / Virtual Dom React Hit
Search
konosumi
December 08, 2018
0
3.3k
仮想DOMで探る、Reactがヒットした 理由 / Virtual Dom React Hit
konosumi
December 08, 2018
Tweet
Share
More Decks by konosumi
See All by konosumi
真夏に送る、真冬のプロジェクト炎上怪談 ~七不思議編~ / it kaidan 4 nanahushigi
konosumi
0
490
【非公式】技術書典7 ふりかえりLT / tbf07 retrospective LT
konosumi
0
340
におうコードの問題集で高めるWEBエンジニア総合力のススメ / Workbook of code smell
konosumi
1
12k
JavaScriptの書き方についての考察 / How to codeing JavaScript
konosumi
0
1.3k
React未経験だった私が、技術書典4で React本を出すに至るまで / React for techbookfest4
konosumi
1
2.6k
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Balancing Empowerment & Direction
lara
2
580
Navigating Team Friction
lara
188
15k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Facilitating Awesome Meetings
lara
55
6.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Visualization
eitanlees
146
16k
Transcript
仮想DOMで探る、Reactがヒットした 理由 【第5回】JSフレームワーク(またはライブラリ)× ビアバッシュ 初心者勉強 会 in西新宿 @konosumi / このすみ
自己紹介 :このすみ / @konosumi • 中小企業でプレイングマネージャーです • 技術スタック:サーバーサイド + モバイルアプリの開発
• フロントエンドJSは、昨年末から触り始めました => 主にReact.jsとReact Native • あと、趣味でブログを書いたり、同人活動をしています
宣伝: 技術同人サークル このすみ堂@BOOTH • BOOTHにて電子書籍を3冊頒布してます:https://konosumi.booth.pm/ • Firebase x React.jsの本は、無料で公開しています。
目的:Reactがヒットした理由を、DOMから探る • 参考文献 WEB+DB PRESS Vol. 106 仮想DOM革命 @mizchiさん 感想:仮想DOMのメリットと、リアルDOMとの違い
https://www.konosumi.net/entry/2018/08/25/020111
DOMとは何か? • DOM = Document Object Model • ざっくり言えば、DOMとは「ドキュメントを操作するためのインターフェース(=API)」のこ とです
=> Webの場合、HTMLがドキュメントの位置付けです
DOMのイメージ(樹形図な構造体) <BODY> <DIV> <UL> <P> <P> <LI> <LI> ブラウザは、 Javascriptから
DOMを操作する APIを 提供している。
実DOM(リアルDOM)と仮想DOMの違い • 実DOM(=リアルDOM):実際にブラウザに描画されている => 変更すると、実際にブラウザに表示されているHTMLも書き換わる => 書き換えコスト(負荷)の高い操作 • 仮想DOM:メモリ空間などで、擬似的にDOMを再現した単なる構造体 =>
変更すると、単にメモリ空間上にあるデータが書き換わる => 書き換えコスト(負荷)の低い操作
jQueryとReact.jsの違い • jQueryは、実際にブラウザに表示されているHTML(=実DOM)を操作 • Reactは、先に仮想DOMを作る =>仮想DOMと実DOMの差分を計算し、最小コストでHTMLを変更 =>最小限のコストでHTMLを書き換え、圧倒的なパフォーマンス!
Reactは、差分検知のアルゴリズム • Reactは、仮想DOMと実DOMの差分を計算している => React = 差分検知アルゴリズムといっても過言ではない • React.jsは、ReactをWEBの世界に適用しただけなので、他に応用できる =>
React Native(モバイルアプリ)、React VR(VR空間)...etc
Reactのパフォーマンスを上げるには? • Reactは状態変化が起きると仮想DOMを再構成し、実DOMと差分計算する => つまり、仮想DOMを再構成を抑えると、パフォーマンスは上がる • 再構成を否定する: shouldComponentUpdateで、仮想DOMに変更があるかを事前 判断 •
参考記事 ReactでshouldComponentUpdateを使ったチューニング https://qiita.com/wordijp/items/cfda7bbad195eec22cc3
Fluxによる状態の集約 • HTMLが書き換わる流れ: 現在の状態(state)が変わる => 再レンダリング(仮想DOM の再構成) => 実DOMとの差分を計算 =>
実際にHTML(=実DOM)を書き換える => React.js は、現在の状態を個々のReactコンポーネントが持っている => 管理が辛い => 状態を一元管理するために生まれたのがFlux •Fluxは単方向のデータフローです(注:仮想DOMや実DOMの状態に依存しない)
まとめ • jQueryは実DOM、React.jsは仮想DOMを操作 • ざっくり言うと、React = 差分検知の仕組み(アルゴリズム)です • 差分検知はReact NativeやReact
VRの世界でも活躍 • 仮想DOMの再構成を減らすと、Reactのパフォーマンスは上がります •Fluxは、単方向の特性を活かしてます