跳到主要内容

虚拟 DOM && diff 算法

虚拟 DOM: 通过 js 生成一个 AST 节点树。

为什么需要虚拟 DOM?

因为直接操作 DOM 相对于操作 JS 来说会消耗更多的性能。 (DOM 有很多属性) 可以算法优化

diff

1. 没有 key

  • patch(替换 DOM)
  • 新增
  • 删除

2. 有 key

isSaneVBideType 判断 2 个 dom 是否相同,(type, key 是否相同)

  • 前序对比算法(头和头比)
  • 尾序对比算法(尾和尾比)
  • 新节点,新增
  • 旧节点,删除
  • 特殊情况乱序(最长递增子序列)