Vue 是怎么快速找出需要更新的节点的?
Vue Diff 发生在 Virtual DOM Patch 阶段,采用同层对比策略:只比较同一层级的节点,不跨级比较。
用 4 个指针:旧头、旧尾、新头、新尾。
通过 4 种组合(头头、尾尾、头尾、尾头)尝试匹配:
适合:反转列表、首尾追加等常见操作
用 最长递增子序列 (LIS) 算法:
优势:移动次数最少,性能更好
不加 Key 时,Vue 采用就地复用:
必须加 Key:让 Diff 识别节点身份,正确复用/移动/删除
| Vue 2 | Vue 3 | |
|---|---|---|
| 算法 | 双端对比 | 最长递增子序列 |
| 性能 | 好 | 更好 |
| Key | 必须加 | 必须加 |