虛擬DOM和diff演算法的分析理解

2021-10-07 08:31:30 字數 1107 閱讀 7138

一、dom和虛擬dom

我是文字<

/p>

<

/div>

var vnode =]}

;

二、虛擬dom的設計思想

虛擬dom的核心思想是:對複雜的文件dom結構,提供一種方便的工具,進行最小化地dom操作。

提供一種方便的工具,使得開發效率得到保證

保證最小化的dom操作,使得執行效率得到保證

根據虛擬dom樹最初渲染成真實dom

當資料變化,或者說是頁面需要重新渲染的時候,會重新生成乙個新的完整的虛擬dom

用新的虛擬dom來和舊的虛擬dom做對比(使用diff演算法)。得到需要更新的地方之後,更新內容,這樣就能大量減少真實dom的操作,提高效能。

三、虛擬dom的diff演算法

虛擬dom中,在dom的狀態發生變化時,虛擬dom會進行diff運算,來更新只需要被替換的dom,而不是全部重繪。

在diff演算法中,只平層的比較前後兩棵dom樹的節點,沒有進行深度的遍歷。

如果節點型別改變,直接將舊節點解除安裝,替換為新節點,舊節點包括下面的子節點都將被解除安裝,如果新節點和舊節點僅僅是型別不同,但下面的所有子節點都一樣時,這樣做也是效率不高的乙個地方。

節點型別不變,屬性或者屬性值改變,不會解除安裝節點,執行節點更新的操作。

文字改變,直接修改文字內容。

移動,增加,刪除子節點時:如果想在中間插入節點f,最簡單做法是:解除安裝c,裝載f,解除安裝d,裝載c,解除安裝e,裝載d,裝載e。如下圖:

寫**時,如果沒有給陣列或列舉型別定義乙個key,就會採用上面的粗暴演算法。

如果為元素增加key後,vue就能根據key,直接找到具體的位置進行操作,效率比較高。如下圖:

虛擬DOM和Diff演算法

虛擬dom其實就是在真實dom之前加了一層js物件生成的dom 用js物件模擬dom 把這個虛擬dom物件轉為真實的dom插入到頁面中 如果有事件修改了虛擬dom,比較兩個虛擬dom樹的差異,得到差異物件 補丁 把差異物件應用到正則的dom樹上 比較同級的節點 同一父節點的子節點 當發現節點已經不存...

虛擬DOM和diff演算法

虛擬dom virtual dom 也就是我們常說的虛擬節點,它是通過js的object物件模擬dom中的節點,然後再通過特定的render方法將其渲染成真實的dom的節點。為什麼要使用虛擬dom呢,因為操作真實dom的耗費的效能代價太高,頻繁的操作dom,會大量的造成頁面的重繪和回流,出於效能優化...

虛擬DOM和 Diff演算法

1 用js來模擬dom中的節點。傳說中的虛擬dom。虛擬dom實現過程 1.根據真實dom產生虛擬dom?虛擬dom?就是乙個特殊物件 經過一些處理能產生真實dom 2.進行編譯解析 3.將虛擬dom 變成真實dom 也就 掛載 4.資料發生變化 產生新的虛擬dom 5 將資料變化後的虛擬dom 和...