虛擬DOM

在了解vDOM流程前需要先了解真實DOM的流程

一菇用、真實DOM和其解析流程酌伊?

瀏覽器渲染引擎工作流程都差不多报亩,大致分為5步舌厨,創(chuàng)建DOM樹——創(chuàng)建StyleRules——創(chuàng)建Render樹——布局Layout——繪制Painting

第一步

用HTML分析器岂却,分析HTML元素忿薇,構(gòu)建一顆DOM樹(標記化和樹構(gòu)建)裙椭。

第二步

用CSS分析器躏哩,分析CSS文件和元素上的inline樣式,生成頁面的樣式表揉燃。

第三步

將DOM樹和樣式表扫尺,關(guān)聯(lián)起來,構(gòu)建一顆Render樹(這一過程又稱為Attachment)炊汤。每個DOM節(jié)點都有attach方法正驻,接受樣式信息,返回一個render對象(又名renderer)抢腐。這些render對象最終會被構(gòu)建成一顆Render樹姑曙。

第四步

有了Render樹,瀏覽器開始布局迈倍,為每個Render樹上的節(jié)點確定一個在顯示屏上出現(xiàn)的精確坐標伤靠。

第五步

Render樹和節(jié)點顯示坐標都有了,就調(diào)用每個節(jié)點paint方法啼染,把它們繪制出來宴合。

  • DOM樹的構(gòu)建是文檔加載完成開始的?構(gòu)建DOM數(shù)是一個漸進過程迹鹅,為達到更好用戶體驗卦洽,渲染引擎會盡快將內(nèi)容顯示在屏幕上。它不必等到整個HTML文檔解析完畢之后才開始構(gòu)建render數(shù)和布局斜棚。

  • Render樹是DOM樹和CSSOM樹構(gòu)建完畢才開始構(gòu)建的嗎阀蒂?這三個過程在實際進行的時候又不是完全獨立,而是會有交叉弟蚀。會造成一邊加載脂新,一遍解析,一遍渲染的工作現(xiàn)象粗梭。

  • CSS的解析是從右往左逆向解析的(從DOM樹的下-上解析比上-下解析效率高)争便,嵌套標簽越多,解析越慢断医。

二滞乙、JS操作真實DOM的代價!

用我們傳統(tǒng)的開發(fā)模式鉴嗤,原生JS或JQ操作DOM時斩启,瀏覽器會從構(gòu)建DOM樹開始從頭到尾執(zhí)行一遍流程。在一次操作中醉锅,我需要更新10個DOM節(jié)點兔簇,瀏覽器收到第一個DOM請求后并不知道還有9次更新操作,因此會馬上執(zhí)行流程,最終執(zhí)行10次垄琐。例如边酒,第一次計算完,緊接著下一個DOM更新請求狸窘,這個節(jié)點的坐標值就變了墩朦,前一次計算為無用功。計算DOM節(jié)點坐標值等都是白白浪費的性能翻擒。即使計算機硬件一直在迭代更新氓涣,操作DOM的代價仍舊是昂貴的,頻繁操作還是會出現(xiàn)頁面卡頓陋气,影響用戶體驗劳吠。

三、虛擬DOM

虛擬DOM就是為了解決瀏覽器性能問題而被設(shè)計出來的巩趁。如前赴背,若一次操作中有10次更新DOM的動作,虛擬DOM不會立即操作DOM晶渠,而是將這10次更新的diff內(nèi)容保存到本地一個JS對象中凰荚,最終將這個JS對象一次性attch到DOM樹上,再進行后續(xù)操作褒脯,避免大量無謂的計算量便瑟。所以,用JS對象模擬DOM節(jié)點的好處是番川,頁面的更新可以先全部反映在JS對象(虛擬DOM)上到涂,操作內(nèi)存中的JS對象的速度顯然要更快,等更新完成后颁督,再將最終的JS對象映射成真實的DOM践啄,交由瀏覽器去繪制。

Vitual DOM是一種虛擬dom技術(shù)沉御,本質(zhì)上是基于javascript實現(xiàn)的屿讽,相對于dom對象,javascript對象更簡單吠裆,處理速度更快伐谈,dom樹的結(jié)構(gòu),屬性信息都可以很容易的用javascript對象來表示试疙。

Virtual DOM并沒有完全實現(xiàn)DOM诵棵,Virtual DOM最主要的還是保留了Element之間的層次關(guān)系和一些基本屬性. 你給我一個數(shù)據(jù),我根據(jù)這個數(shù)據(jù)生成一個全新的Virtual DOM祝旷,然后跟我上一次生成的Virtual DOMdiff履澳,得到一個Patch嘶窄,然后把這個Patch(補丁)打到瀏覽器的DOM上去。

虛擬DOM的存在的意義距贷? Vitual DOM 的真正意義是為了實現(xiàn)跨平臺柄冲,服務(wù)端渲染,以及提供一個性能還算不錯 Dom 更新策略储耐。Vitual DOM讓整個 mvvm 框架靈活了起來。

diff只是為了虛擬DOM比較替換效率更高滨溉,通過diff得到diff算法結(jié)果數(shù)據(jù)表(需要進行哪些操作記錄表)什湘。原本要操作的DOM在vue這邊還是要操作的,只不過用到了js的DOM fragment來操作dom(統(tǒng)一計算出所有變化后統(tǒng)一更新一次DOM)進行瀏覽器DOM一次性更新晦攒。其實DOM fragment我們不用平時發(fā)開也能用闽撤,但是這樣程序員寫業(yè)務(wù)代碼就用把DOM操作放到fragment里,這就是框架的價值脯颜,程序員才能專注于寫業(yè)務(wù)代碼。

文章原址請點擊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舟茶,隨后出現(xiàn)的幾起案子渗柿,更是在濱河造成了極大的恐慌,老刑警劉巖矾芙,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舍沙,死亡現(xiàn)場離奇詭異,居然都是意外死亡剔宪,警方通過查閱死者的電腦和手機拂铡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葱绒,“玉大人感帅,你說我怎么就攤上這事〉氐恚” “怎么了失球?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帮毁。 經(jīng)常有香客問我她倘,道長,這世上最難降的妖魔是什么作箍? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任硬梁,我火速辦了婚禮,結(jié)果婚禮上胞得,老公的妹妹穿的比我還像新娘荧止。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布跃巡。 她就那樣靜靜地躺著危号,像睡著了一般。 火紅的嫁衣襯著肌膚如雪素邪。 梳的紋絲不亂的頭發(fā)上外莲,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音兔朦,去河邊找鬼偷线。 笑死,一個胖子當著我的面吹牛沽甥,可吹牛的內(nèi)容都是我干的声邦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼摆舟,長吁一口氣:“原來是場噩夢啊……” “哼亥曹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恨诱,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤媳瞪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后照宝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體材失,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年硫豆,在試婚紗的時候發(fā)現(xiàn)自己被綠了龙巨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡熊响,死狀恐怖旨别,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汗茄,我是刑警寧澤秸弛,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站洪碳,受9級特大地震影響递览,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞳腌,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一绞铃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫂侍,春花似錦儿捧、人聲如沸荚坞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颓影。三九已至,卻和暖如春懒鉴,著一層夾襖步出監(jiān)牢的瞬間诡挂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工临谱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留璃俗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓吴裤,卻偏偏與公主長得像旧找,于是被迫代替她去往敵國和親溺健。 傳聞我的和親對象是個殘疾皇子麦牺,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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

  • 一、真實DOM和其解析流程鞭缭? 瀏覽器渲染引擎工作流程都差不多剖膳,大致分為5步,創(chuàng)建DOM樹——創(chuàng)建StyleRu...
    LoveBugs_King閱讀 190,473評論 23 336
  • 文章結(jié)構(gòu): React中的虛擬DOM是什么? 虛擬DOM的簡單實現(xiàn)(diff算法) 虛擬DOM的內(nèi)部工作原理 Re...
    李輕舟閱讀 3,033評論 2 14
  • 近一年業(yè)務(wù)項目中都在使用React框架沦童,也出現(xiàn)了一些以前沒怎么關(guān)注過的新概念仑濒,例如虛擬DOM。虛擬DOM本身不是什...
    張歆琳閱讀 72,409評論 10 119
  • 目錄: 1 前言 2 對前端應(yīng)用狀態(tài)管理思考 3 Virtual DOM 算法 4 算法實現(xiàn)4.1 步驟一:用JS...
    DavieKong閱讀 808評論 0 1
  • 一偷遗、真實DOM和其解析流程墩瞳? 瀏覽器渲染引擎工作流程都差不多,大致分為5步氏豌,創(chuàng)建DOM樹——創(chuàng)建StyleRule...
    Gen_閱讀 385評論 0 0