React的diff演算法

2022-02-03 12:33:22 字數 732 閱讀 8076

react的diff演算法主要是兩個tree的比較。

傳統的tree diff演算法複雜度是o(n^3),react是演算法通過一些策略將複雜度將為o(n).

1. 優化策略

1. 網頁中的dom跨層級移動的特別少,可以忽略不計

2. 相同型別的元件生成相似的樹形結構,不同型別的元件生成不同的樹形結構

3. 同一層級的節點,可以通過唯一id來區分

2. 優化演算法

基於以上的策略,react對diff演算法進行了一下優化

1. tree diff

只對同一層級的節點進行比較,跨層級移動,直接銷毀子樹,在目的節點完全插入子樹,這樣只需對樹進行一次遍歷,便能完成整個dom樹的比較

2. component diff

1. 同一型別元件,按照tree diff進行同級比較,並且增加了shouldcomponentupdate鉤子來判斷元件是否發生變化,無變化,不比較,從而節省diff時間

2. 不同型別元件,將元件標記為dirty component,從而替換整個元件下的所有子節點

3. element diff

對於同一層級的element,通過唯一id,可以優化其新增,修改,刪除操作

在開發react元件時,保持dom結構的穩定有助於提示性能。

參考:

React的Diff演算法

要掌握react的diff演算法我們必須先了解一下其渲染的機制 在每一次的狀態或者屬性更新的時候,react元件的render方法會進行渲染,返回乙個虛擬dom物件,這個就是react的渲染機制。但是這裡就有個問題,每次生成新的dom結構,也還是要轉化為真實的dom,還是會帶來大量的真實dom的操作...

深入 React 之 diff 演算法

寫前端的人都知道 react 框架採用的是虛擬 dom。而虛擬 dom 就是 js 物件到真實 dom 的一種對映。list item item 1 li ul children children item 1 從上述案例中可以看到,真實 dom 對映出來的 js 物件 虛擬 dom 是一種樹形結構...

react中Diff演算法的不同

1.傳統diff演算法 將所有節點遍歷,增刪減改 2.reactdiff演算法 分為三塊 1 比較虛擬dom和實際dom的同一層節點,忽略子節點 2 對比元件型別,如果一樣繼續比較dom節點,如果不同,直接替換整個元件節點 3 提供節點操作 同一層節點 插入 移動 刪除 附錄 傳統diff演算法 l...