diff算法


diff新老节点替换的规则

  1. 如果新老节点不是同一个节点名称,那么就暴力删除旧的节点,创建插入新的节点
  2. 只能同级比较、不能跨层比较。如果跨层那么就暴力删除旧的节点,创建插入新的节点
  3. 如果是相同节点,又分为很多种情况:
  • 新节点没有children

​ 如果新的节点没有children,那就证明新节点是文本,那直接把旧的节点替换成新的文本

  • 新节点有children,旧的没有:则创建元素添加(把旧的内容删除清空掉,增加新的)
  • 新的节点有children,旧的也有children(diff算法核心)下面进行细讲

diff算法核心

新的节点有children,旧的节点也有children

1.旧前 和 新前

匹配的话:旧前指针++ 新前的指针++

2.旧后 和 新后

匹配的话:旧后的指针– 新后的指针–

3.旧前 和 新后

匹配的话:旧前的指针++ 新后的指针–

4.旧后 和 新前

匹配的话:旧后的指针– 新前的指针++

5.以上都不满足条件(查找)

新的指针++ 新的添加到页面上并且旧的中有,要给旧的赋值成undefined

6.创建或者删除


文章作者: Daniel Lin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Daniel Lin !
  目录