virtual Dom的diff算法

2019-11-10  本文已影响0人  木中木

diff 在virtual dom上应用,在传统的diff算法上,增加以下几个策略

  1. web UI中DOM节点跨层级操作特别少,可以忽略不计
  2. 相同类的两个组件可以生成相似的,tree,不同类的组件生成不同的tree
  3. 同层级的一组子节点,他们可以通过唯一的ID进行区分。

diff算法基于以上三种策略,分别有了treediff、Component diff以及element diff

以上就是整个diff算法的运行过程,当然diff算法还存在不足之处,比如旧: A B C D ,新: D A B C ,然后就出现D不变,ABC分别移动到后面去,所以在开发过程中要尽量减少从队尾直接移动到列表首部的操作。

经过diff算法之后,我们知道哪些节点、属性需要删除、更新和创建,那么到了最后一步就是 Patch,就是把diff后需要更新的内容,更新到真实的节点上,通过react Patch方法来处理,方法非常简单: 通过遍历差异队列,通过更新类型进行相应的操作,包括新节点的插入,已有节点的移动和移除等。

至此整个diff算法讲述完毕

上一篇 下一篇

猜你喜欢

热点阅读