快速理解 React 基礎:Reconciliation
核心思想: 在記憶體裡比對速度很快,但更新到 DOM 上的成本很高
所以應盡可能的最小化 DOM 的異動以達到高效
Reconciliation 具體流程
- 產生出整棵 React element tree,存在記憶體,這個速度非常的快。因為只是 plain JavaScript object。
- 這棵樹也叫做 Virtual DOM Tree (React 16.3後,改名 Fiber Tree。為避免與舊版混淆,故換個名字)
- 當樹改變時,重新產出一棵新的樹,透過
diffing Algorithm
找出差異。此演算法可將 O(n^3) -> O(n) - 將差異更新到 DOM 上
Diffing Algorithm
- 不同節點,直接產生不同的樹,不偵測差異,而是直接取代。為相同節點時,再去比對屬性差異
- 若是 list 的改變,指定 keys 以增加效能(尤其是從前面插入資料)。key 只需要在兄弟節點(sibling node)唯一,不必全局唯一
比對差異時,會是 Top-down 遞迴比對
參考資料
react reconciliation
YouTube / How Does React Actually Work? React.js Deep Dive #1