React-VirtualDOM原理淺談

何宏偉

DOM

[嵌牛導(dǎo)讀]

上篇文章談到React的魅力-“組件化UI”馏段,如何將你的頁面運用組件化的思想進行劃分邑雅,繼而能夠保證

清晰的邏輯能夠清晰的展示數(shù)據(jù)

Reactstate將數(shù)據(jù)進行了雙向綁定,使得獲取服務(wù)器的數(shù)據(jù)之后頁面能夠立即更新寝贡,無延遲,用戶友好。那么堰酿,React是如何做到

數(shù)據(jù)更新的迅速反應(yīng), 數(shù)據(jù)無阻塞,無延遲地渲染到組件上

[嵌牛鼻子]

VirtualDOM | DOM | React | Diff算法

[嵌牛提問]

  • VirtualDOM 和 DOM是什么關(guān)系张足?
  • 組件如何更新触创,更新的是什么?

[嵌牛正文]

Tree Structure

i. VirtualDOM & DOM

  • DOM
    DOM樹
  • DOM, (Document Objecet Model), 文檔對象模型
  • DOM定義了訪問HTML或是XML文檔的標(biāo)準为牍,是一種使程序動態(tài)的訪問哼绑,更新HTML文檔或XML文檔等的內(nèi)容,結(jié)構(gòu)以及樣式的平臺碉咆,操作接口
  • DOM定義了文檔的對象和屬性抖韩,以及訪問它們的接口

我們所建立的HTML頁面正是由大量的DOM節(jié)點組成,如圖(DOM樹)所示疫铜,所有的DOM節(jié)點組成一顆DOM樹茂浮,節(jié)點之間存在不同的聯(lián)系,也正是這些聯(lián)系構(gòu)建出我們需要的邏輯壳咕,需要展示的頁面

  • VirtualDOM
  • VirtualDOM励稳,虛擬DOM對象,是React中的DOM對象
  • React使用JSX編寫虛擬DOM對象囱井,經(jīng)過Babel編譯之后會生成真正的DOM. 然后會將真正的DOM插入(Render)到頁面
  • VirtualDOM的好處是具有高可操作性驹尼,高可定義性,能夠非常方便的動態(tài)生成頁面內(nèi)容

整個頁面被看作一個Javascript對象庞呕,簡單來說新翎,對這個對象的操作就是對整個頁面的操作程帕,React將純DOM(真正的DOM)操作隔離開,自身采用JSX編寫“Javascriipt語法的HTML”地啰,這也正是React的優(yōu)勢所在

ii. Diff算法

組件在更新時愁拭,新數(shù)據(jù)到達需要重新渲染到頁面,若采用HTML DOM的節(jié)點更新亏吝,對于龐大的DOM樹岭埠,重新渲染頁面,重新構(gòu)造DOM節(jié)點蔚鸥,這是非常大的開銷

Diff算法

  • 將未更新的頁面生成一份虛擬DOM對象
  • 新數(shù)據(jù)到達時惜论,先構(gòu)建新的虛擬DOM對象,然后比對新DOM和舊DOM的不同之處止喷,即發(fā)生數(shù)據(jù)改變的地方
  • 然后只要更新數(shù)據(jù)改變的部分就可以達到更新整個頁面的效果馆类、

這使得我們在state改變后render整個頁面而不用擔(dān)心性能的問題,極大的簡化了UI開發(fā)的復(fù)雜度弹谁,提高的運行效率


END
參考文章及鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乾巧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子预愤,更是在濱河造成了極大的恐慌沟于,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件植康,死亡現(xiàn)場離奇詭異旷太,居然都是意外死亡,警方通過查閱死者的電腦和手機向图,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門泳秀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榄攀,你說我怎么就攤上這事嗜傅。” “怎么了檩赢?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵吕嘀,是天一觀的道長。 經(jīng)常有香客問我贞瞒,道長偶房,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任军浆,我火速辦了婚禮棕洋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乒融。我一直安慰自己掰盘,他們只是感情好摄悯,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愧捕,像睡著了一般奢驯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上次绘,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天瘪阁,我揣著相機與錄音,去河邊找鬼邮偎。 笑死管跺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钢猛。 我是一名探鬼主播伙菜,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼轩缤,長吁一口氣:“原來是場噩夢啊……” “哼命迈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起火的,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤壶愤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馏鹤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體征椒,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年湃累,在試婚紗的時候發(fā)現(xiàn)自己被綠了勃救。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡治力,死狀恐怖蒙秒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宵统,我是刑警寧澤晕讲,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站马澈,受9級特大地震影響瓢省,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痊班,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一勤婚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涤伐,春花似錦馒胆、人聲如沸荆永。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽具钥。三九已至,卻和暖如春液兽,著一層夾襖步出監(jiān)牢的瞬間骂删,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工四啰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宁玫,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓柑晒,卻偏偏與公主長得像欧瘪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匙赞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 參考文章:深度剖析:如何實現(xiàn)一個Virtual DOM 算法 作者:戴嘉華React中一個沒人能解釋清楚的問題——...
    waka閱讀 5,966評論 0 21
  • 做React需要會什么涌庭? react的功能其實很單一芥被,主要負責(zé)渲染的功能,現(xiàn)有的框架坐榆,比如angular是一個大而...
    蒼都閱讀 14,769評論 1 139
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南拴魄,這只是我在學(xué)習(xí)過程中的一些閱讀筆記,個人覺得該教程講解深入淺出席镀,比目前大...
    leonaxiong閱讀 2,843評論 1 18
  • 介紹 React.js是什么 React是由工作在Facebook開發(fā)出來的用于開發(fā)用戶交互界面的JS庫匹中。其源碼由...
    bravin閱讀 1,343評論 3 1
  • 張震oppo大片美因苛求 85秒只用來播放一個廣告顶捷,這本就讓我不得不去關(guān)注它;現(xiàn)在用的就是oppo的手機跛溉,所以更關(guān)...
    六月夏夏A閱讀 245評論 0 1