diff 算法

diff 算法用来比较新旧 DOM 树。循环遍历树结构的时间复杂度是 O(n^3),diff 的作用就是降低时间复杂度至 O(n)。

diff 原理

  • 只比较同一层级,不跨级比较
  • tag 不相同,则直接删掉重建,不再深度比较
  • tag 和 key,两者都相同,则认为是相同节点,不再深度比较

Vue 为什么不推荐 index 作索引

diff 原理就是通过标签 type + index 作比较

比较规则:

  1. 新旧 VDOM key 相同
    • 内容没变,复用真实 DOM
    • 内容变了,生成新的真实 DOM
  2. key 不相同,创建新的真实 DOM