React--diff算法和三种优化策略

学习资源推荐

  • 参考文章
  • https://www.jianshu.com/p/ca44182828ae
  • https://www.jianshu.com/p/3ba0822018cf

简介

react为追求性能的极致,采用了虚拟dom,本身是一个js对象。创建一个对象的开销比创建一个dom节点的开销小很多。当然,虚拟dom最终要转化为真实dom。react中,将虚拟dom树转换成真实dom树的最少操作的过程 称为 调和 ,diff算法是调和的具体实现。针对不同情况,diff算法有三种优化策略。

树的优化策略(tree diff)

核心点

  • 层级控制,diff在树这一层仅仅比较当前同一层次节点。
  • 暴力删除,如果同层次比较的某个节点不存在,或者说整个树结构发生了大的变化,那该节点及其子节点都将被直接销毁
  • 跨层级比较会进行相应的创建节点和删除节点的操作。
    在这里插入图片描述

在这里插入图片描述

组件的优化策略(component diff)

关注点

  • 是否同一类型,是则采用原策略比较,tree diff
  • 不是同一类型,将该组件判断为 dirty component,从而替换整个组件下的所有子节点。
  • 对于同一类型的组件,有可能其 结构 没有任何变化,比如只是内容发生了改变,此时可以使用shouldComponentUpdate()return false,手动终止diff算法,加快渲染速度

在这里插入图片描述

元素的优化策略(element diff)

关注点

  • INSERT_MARKUP(插入)

    • 全新的节点,需要执行插入操作。
  • MOVE_EXISTING(移动)

    • 节点本身存在,只是位置不在目标位置,需进行移动操作
  • REMOVE_NODE(删除)

    • 结构相同内容不同,无法直接复用,需要删除重建
  • 基于唯一标识key进行运算,快速定位

在这里插入图片描述

发布了450 篇原创文章 · 获赞 787 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_42813491/article/details/95444796