虛擬 DOM 和 DOM diff

1.虛擬 DOM

與頁(yè)面DOM元素對(duì)應(yīng)的對(duì)象轻纪。包含標(biāo)簽名、標(biāo)簽上的屬性催植、事件監(jiān)聽及其子元素肮蛹。本質(zhì)是一個(gè)JS對(duì)象。

2.優(yōu)點(diǎn)

  • 減少DOM操作(次數(shù)和范圍)
    虛擬DOM可以將多次操作合并為一次创南,比如添加1000個(gè)節(jié)點(diǎn)伦忠,不是一次次添加DOM節(jié)點(diǎn)。(次數(shù))
    借助DOM diff將多余的操作省略稿辙,比如添加1000個(gè)節(jié)點(diǎn)昆码,根據(jù)DOM diff對(duì)比,其實(shí)只有10個(gè)是新的邻储。(范圍)
  • 跨平臺(tái)
    虛擬DOM應(yīng)用在小程序未桥、iOS系統(tǒng)、安卓應(yīng)用

3.缺點(diǎn)

需要額外的創(chuàng)建函數(shù)來(lái)創(chuàng)建芥备,React使用createElement,Vue使用h函數(shù)舌菜,依賴打包工具構(gòu)建js文件

4.DOM diff

一個(gè)函數(shù)萌壳,運(yùn)行DOM的操作,對(duì)比新舊DOM 樹然后更新。
patches = patch(oldVNode,newVNode)

Tree diff
將新舊兩棵樹逐層進(jìn)行對(duì)比,查找更新節(jié)點(diǎn)
更新節(jié)點(diǎn)為組件-Component diff
更新節(jié)點(diǎn)為標(biāo)簽-Element diff
Component diff
如果節(jié)點(diǎn)是組件袱瓮,就先看組件類型
類型不同直接替換(刪除舊的)
類型相同則只更新屬性
然后深入組件做 Tree diff(遞歸)
Element diff
如果節(jié)點(diǎn)是原生標(biāo)簽缤骨,則看標(biāo)簽名
標(biāo)簽名不同直接替換,相同則只更新屬性
然后進(jìn)入標(biāo)簽后代做 Tree diff(遞歸)

5.DOM diff 的優(yōu)點(diǎn)

可以減少DOM操作

6.DOM diff 的問(wèn)題(key)

在同級(jí)節(jié)點(diǎn)對(duì)比有bug尺借,在同級(jí)節(jié)點(diǎn)更新時(shí)無(wú)法判斷是刪除了子節(jié)點(diǎn)p绊起,還是更新了子節(jié)點(diǎn)p,給他們添加唯一值key來(lái)標(biāo)識(shí)就可以解決燎斩。不要用index來(lái)作為key值虱歪,在增刪DOM節(jié)點(diǎn)時(shí),index作為數(shù)組的下標(biāo)是不變的栅表,比如[1,2,3]變成[1,3],下標(biāo)2始終存在笋鄙。

實(shí)際是刪除節(jié)點(diǎn)p,代碼會(huì)認(rèn)為更新節(jié)點(diǎn)p且刪除節(jié)點(diǎn)span.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怪瓶,一起剝皮案震驚了整個(gè)濱河市萧落,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洗贰,老刑警劉巖找岖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異敛滋,居然都是意外死亡许布,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門矛缨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爹脾,“玉大人,你說(shuō)我怎么就攤上這事箕昭×榉粒” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵落竹,是天一觀的道長(zhǎng)泌霍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)述召,這世上最難降的妖魔是什么朱转? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮积暖,結(jié)果婚禮上藤为,老公的妹妹穿的比我還像新娘夺刑。我一直安慰自己缅疟,他們只是感情好分别,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著存淫,像睡著了一般耘斩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桅咆,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天括授,我揣著相機(jī)與錄音,去河邊找鬼岩饼。 笑死荚虚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忌愚。 我是一名探鬼主播曲管,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼硕糊!你這毒婦竟也來(lái)了院水?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤简十,失蹤者是張志新(化名)和其女友劉穎檬某,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體螟蝙,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恢恼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胰默。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片场斑。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牵署,靈堂內(nèi)的尸體忽然破棺而出漏隐,到底是詐尸還是另有隱情,我是刑警寧澤奴迅,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布青责,位于F島的核電站,受9級(jí)特大地震影響取具,放射性物質(zhì)發(fā)生泄漏脖隶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一暇检、第九天 我趴在偏房一處隱蔽的房頂上張望产阱。 院中可真熱鬧,春花似錦块仆、人聲如沸心墅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怎燥。三九已至,卻和暖如春蜜暑,著一層夾襖步出監(jiān)牢的瞬間铐姚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工肛捍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隐绵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓拙毫,卻偏偏與公主長(zhǎng)得像依许,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缀蹄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • 1.什么是虛擬DOM峭跳? 是一個(gè)能代表DOM 樹的對(duì)象,通常含有標(biāo)簽名缺前、標(biāo)簽上的屬性蛀醉、事件監(jiān)聽和子元素們,以及其他屬...
    雨溪灘閱讀 372評(píng)論 0 1
  • DOM總結(jié) 虛擬DOM是什么 一個(gè)能代表DOM樹的對(duì)象衅码,通常含有標(biāo)簽名拯刁、標(biāo)簽上的屬性、事件監(jiān)聽和子元素們逝段,以及其它...
    盧盧2020閱讀 225評(píng)論 0 0
  • 虛擬DOM是什么垛玻? 一個(gè)能代表DOM樹的對(duì)象,通常含有標(biāo)簽名奶躯、標(biāo)簽上的屬性帚桩、事件監(jiān)聽和子元素們,以及其他屬性巫糙。 虛...
    Marshall3572閱讀 209評(píng)論 0 1
  • 一個(gè)代表DOM樹的對(duì)象朗儒,通常含有標(biāo)簽名,標(biāo)簽上的屬性参淹,事件監(jiān)聽和子元素們以及其他屬性優(yōu)點(diǎn) 減少dom操作a. 將多...
    haoti閱讀 128評(píng)論 0 0
  • 虛擬 DOM 的優(yōu)點(diǎn) 減少 DOM 操作 剛剛我們說(shuō)過(guò)了醉锄,DOM 操作是跨線程的,性能并不好浙值,但寫網(wǎng)頁(yè)又不得不操作...
    默_淰閱讀 137評(píng)論 0 0