DOM和VDOM

<meta charset="utf-8">

DOM的缺陷:

Java 操縱 DOM 是會(huì)影響到整個(gè)渲染流水線的,另外,DOM 還提供了一組 Java 接口用來遍歷或者修改節(jié)點(diǎn),這套接口包含了 getElementById、removeChild、 等方法。

比如,我們可以調(diào)用 document.body.(node)往 body 節(jié)點(diǎn)上添加一個(gè)元素,調(diào)用該 API 之后會(huì)引發(fā)一系列的連鎖反應(yīng)。首先渲染引擎會(huì)將 node 節(jié)點(diǎn)添加到 body 節(jié)點(diǎn)之上,然后觸發(fā)樣式計(jì)算、布局、繪制、柵格化、合成等任務(wù),我們把這一過程稱為重排。除了重排之外,還有可能引起重繪或者合成操作,形象地理解就是“牽一發(fā)而動(dòng)全身”。另外,對(duì)于 DOM 的不當(dāng)操作還有可能引發(fā)強(qiáng)制同步布局和布局抖動(dòng)的問題,這些操作都會(huì)大大降低渲染效率。因此,對(duì)于 DOM 的操作我們時(shí)刻都需要非常小心謹(jǐn)慎。

DOM的本質(zhì):

瀏覽器概念,瀏覽器從服務(wù)器端獲取html頁面,瀏覽器將html解析成一顆元素嵌套關(guān)系的dom樹,用對(duì)象來表示頁面的元素,并提供操作dom對(duì)象的api。

VDOM:

框架概念,用js對(duì)象來模擬頁面的dom元素的嵌套關(guān)系,并沒有真正的掛載到頁面上,作用就是對(duì)比兩顆dom樹的差別,進(jìn)行頁面的局部更新,由于VUE是數(shù)據(jù)驅(qū)動(dòng),更加的利于局部更新避免重繪。

VDOM做了哪些事情:

1.將頁面改變的內(nèi)容應(yīng)用到虛擬DOM上,而不是直接應(yīng)用到DOM上。

2.變化被應(yīng)用到虛擬DOM上時(shí),虛擬DOM并不著急去渲染頁面,而僅僅是調(diào)整虛擬DOM的內(nèi)部狀態(tài),這樣操作虛擬DOM的代價(jià)就減輕了。

3.在虛擬DOM收集到足夠的改變時(shí),再把這些變化一次性應(yīng)用到真是的DOM上。

3.png

框架給你的保證是,你在不需要手動(dòng)優(yōu)化的情況下,我依然可以給你提供過得去的性能。

在比較性能的時(shí)候,要分清楚初始渲染、小量數(shù)據(jù)更新、大量數(shù)據(jù)更新這些不同的場合。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容