vue 為何引入virtual dom

不再解釋什么是virtual dom了,爛大街了。
這里問題核心是vue本身具有數(shù)據(jù)綁定或者說數(shù)據(jù)劫持媳友,我們的數(shù)據(jù)是對應(yīng)著某個(gè)dom的某個(gè)屬性的。通過數(shù)據(jù)綁定产捞,我們的數(shù)據(jù)可以“靶向”定位出具體哪個(gè)dom的哪個(gè)屬性醇锚,然后直接dom操作進(jìn)行修改,何必搞什么virtual dom和diff坯临,直接更新過去不就行了焊唬?
至于最小化操作,我們完全可以保留一份老數(shù)據(jù)看靠,然后異步統(tǒng)一對比新老數(shù)據(jù)赶促,有不同的就更新,也不需要diff爸运瘛芳杏?
知乎 Vue采用虛擬DOM的目的是什么?



vue是從2.0引入virtual dom的矩屁,那么首先看:
Announcing Vue.js 2.0
Vue 2.0 發(fā)布了!
Vue 的理念問題

從性能方面:

現(xiàn)在的渲染層基于一個(gè)輕量級的 virtual-DOM 實(shí)現(xiàn)爵赵,在大多數(shù)場景下初試化渲染速度和內(nèi)存消耗都提升了 2~4 倍 (詳見這里的 benchmarks)吝秕。從模板到 virtual-DOM 的編譯器和運(yùn)行時(shí)是可以獨(dú)立開來的,所以你可以將模板預(yù)編譯并只通過 Vue 的運(yùn)行時(shí)讓你的應(yīng)用工作起來空幻,而這份運(yùn)行時(shí)的代碼 min+gzip 之后只有不到 12kb (提一下烁峭,React 15 在 min+gzip 之后的大小是 44kb)。編譯器同樣可以在瀏覽器中工作秕铛,也就是說你也可以寫一段 script 標(biāo)簽然后開始你的工作约郁,就像以前一樣。而即便你把編譯器加進(jìn)去但两,build 出來的文件 min+gzip 之后也僅有 17kb鬓梅,仍然小于目前的 1.0 版本。

2.0 用一個(gè) fork 自 snabbdom 的輕量 Virtual DOM 實(shí)現(xiàn)對渲染層進(jìn)行了重寫谨湘。在其上層绽快,Vue 的模板編譯器能夠在編譯時(shí)做一些智能的優(yōu)化處理,例如分析并提煉出靜態(tài)子樹以避免界面重繪時(shí)不必要的比對紧阔。新的渲染層較之 v1 帶來了巨大的性能提升坊罢,也讓 Vue 2.0 成為了最快速的框架之一。除此之外擅耽,它把你在優(yōu)化方面需要做的努力降到了最低活孩,因?yàn)?Vue 的響應(yīng)系統(tǒng)能夠在巨大而且復(fù)雜的組件樹中精準(zhǔn)的判斷其中需要被重繪的那部分。

總的來說:體積不變多少乖仇,初始化渲染性能提升憾儒,內(nèi)存占用減少。

1.體積不變暫且不說这敬,初始化渲染提升航夺、內(nèi)存占用減少是為什么?
單文件vue的加入崔涂,編譯時(shí)便可依靠vdom把模板文件進(jìn)行一定預(yù)編譯阳掐,無需如模板字符串template:"<div>...</div>"等從零編譯,資源占用應(yīng)當(dāng)變少(好像不需要vdom也能這樣優(yōu)化冷蚂,會復(fù)雜了點(diǎn)...缭保?)。

2.關(guān)于vdom多了diff的問題蝙茶,vue并沒有拋棄自己響應(yīng)式的根艺骂。憑借原有基礎(chǔ)vue的vdom實(shí)現(xiàn)具有自我特色,無需像react那樣搞什么shouldcomponentupdate來優(yōu)化隆夯,vue自己就能較為精準(zhǔn)避免不需要的diff钳恕,速度仍然很快(不用vdom根本不用diff...别伏?)

3.又如列表方面,采用vdom可以提高復(fù)用真實(shí)dom忧额。如解析vue2.0的diff算法厘肮,這里如果不采用vdom,單憑數(shù)據(jù)綁定作出的選擇就是直接新建睦番、刪除已有節(jié)點(diǎn)

功能方面

最直接的就是多了render函數(shù)类茂、支持了jsx、可以實(shí)現(xiàn)服務(wù)器渲染托嚣。除此之外還有更多的可擴(kuò)展性和更高一層的抽象能力巩检,而且很大可能是出于這部分考慮而非性能(反正事實(shí)證明比原來快,也沒毛病)示启,引用作者尤雨溪部分原話:

Vue 2.0 引入 vdom 的主要原因是 vdom 把渲染過程抽象化了兢哭,從而使得組件的抽象能力也得到提升,并且可以適配 DOM 以外的渲染目標(biāo)丑搔。這一點(diǎn)是借鑒 React 毫無爭議厦瓢,因?yàn)槲艺J(rèn)為 vdom 確實(shí)是個(gè)好思想。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啤月,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子劳跃,更是在濱河造成了極大的恐慌谎仲,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刨仑,死亡現(xiàn)場離奇詭異郑诺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)杉武,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門辙诞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轻抱,你說我怎么就攤上這事飞涂。” “怎么了祈搜?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵较店,是天一觀的道長。 經(jīng)常有香客問我容燕,道長梁呈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任蘸秘,我火速辦了婚禮官卡,結(jié)果婚禮上蝗茁,老公的妹妹穿的比我還像新娘。我一直安慰自己寻咒,他們只是感情好评甜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仔涩,像睡著了一般忍坷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熔脂,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天佩研,我揣著相機(jī)與錄音,去河邊找鬼霞揉。 笑死旬薯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的适秩。 我是一名探鬼主播绊序,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秽荞!你這毒婦竟也來了骤公?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤扬跋,失蹤者是張志新(化名)和其女友劉穎阶捆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钦听,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洒试,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了朴上。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垒棋。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖痪宰,靈堂內(nèi)的尸體忽然破棺而出叼架,到底是詐尸還是另有隱情,我是刑警寧澤酵镜,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布碉碉,位于F島的核電站,受9級特大地震影響淮韭,放射性物質(zhì)發(fā)生泄漏垢粮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一靠粪、第九天 我趴在偏房一處隱蔽的房頂上張望蜡吧。 院中可真熱鬧毫蚓,春花似錦、人聲如沸昔善。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽君仆。三九已至翩概,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間返咱,已是汗流浹背钥庇。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咖摹,地道東北人评姨。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像萤晴,于是被迫代替她去往敵國和親吐句。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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

  • 前言 React 好像已經(jīng)火了很久很久店读,以致于我們對于 Virtual DOM 這個(gè)詞都已經(jīng)很熟悉了嗦枢,網(wǎng)上也有非常...
    NARUTO_86閱讀 17,146評論 6 65
  • 一,vue是什么两入? Vue.js(讀音 /vju?/, 類似于view) 是一套構(gòu)建用戶界面的漸進(jìn)式框架净宵。與其他重...
    不成才的IT狗閱讀 3,143評論 0 31
  • 變化這件事談?wù)擁撁娴淖兓埃蹅兿瓤聪聰?shù)據(jù)和頁面(視覺層面的頁面)的關(guān)系裹纳。數(shù)據(jù)是隱藏在頁面底下,通過渲染展示給用...
    Www劉閱讀 443評論 0 1
  • 一紧武、Virtual DOM 是什么 本質(zhì)上來說剃氧,Virtual DOM 只是一個(gè)簡單的 JS 對象,并且最少包含 ...
    _既白_閱讀 395評論 0 1
  • (想象著)我躺在海邊阻星,躺在沙灘上朋鞍,沒有風(fēng)、沒有浪妥箕;藍(lán)藍(lán)的海水滥酥,藍(lán)藍(lán)的天空,海面平靜極了…… 一群海鷗在...
    崴崴一笑閱讀 2,440評論 0 1