vue的diff演算法

2021-10-10 16:10:48 字數 515 閱讀 2147

1.當資料發生變化時,vue是怎麼更新節點的?

渲染真實dom的開銷很大,比如我們修改了某個資料,如果直接渲染到真實dom會引起整個dom樹的重繪和重排,有沒有可能我們只更新我們修改的那一小塊dom而不更新整個dom呢?diff演算法可以幫助我們。

我們根據真實dom生成乙個虛擬dom,當虛擬dom某個節點的資料改變後會生成乙個新的vnode,然後vnode和oldvnode做對比,發現有不一樣的地方就直接修改在真實的dom上,然後使oldvnode的值為vnode。

diff的過程就是呼叫名為patch的函式,比較新舊節點,一邊比較一邊給真實的dom打補丁。

2. virtual dom和真實dom的區別?

virtual dom是將真實的dom的資料抽取出來,以物件的形式模擬樹形結構。比如dom是這樣的:

對應的virtual dom(偽**):

3. diff的比較方式?

在採取diff演算法比較新舊節點的時候,比較只會在同層級進行, 不會跨層級比較。

具體請參考大佬文章:

詳解vue的diff演算法

前言先來了解幾個點 1.當資料發生變化時,vue是怎麼更新節點的?要知道渲染真實dom的開銷是很大的,比如有時候我們修改了某個資料,如果直接渲染到真實dom上會引起整個dom樹的重繪和重排,有沒有可能我們只更新我們修改的那一小塊dom而不要更新整個dom呢?diff演算法能夠幫助我們。我們先根據真實...

vue的diff演算法學習

原始碼位址 diff演算法首先要明確乙個概念就是diff的物件是虛擬dom,更新真實dom則是diff演算法的結果 constructor 這個部分的 主要是為了更好地知道在diff演算法中具體diff的屬性的含義,當然也可以更好地了解vnode例項 核心函式是patch函式 isundef判斷 是...

vue的diff演算法理解

diff演算法作用 用來修改dom的一小段,不會引起dom樹的重繪diff演算法實現的原理 diff演算法將virtual dom的某個節點資料改變後生成的新的vnode與舊節點進行比較,並替換為新的節點,具體過程就是呼叫patch方法,比較新舊節點,一邊比較一邊給真實的dom打補丁進行替換func...