美文网首页
React diff算法

React diff算法

作者: 07120665a058 | 来源:发表于2017-08-12 11:40 被阅读80次

传统的diff算法复杂度是O(n*3),而React diff算法改进了传统的diff算法,将算法复杂度降低到了O(n)

diff 策略

  • DOM节点跨层级少
  • 不同组件生成不同DOM树
  • 同一层级子节点,通过id区分

基于以上三个前提策略,React 分别对tree diff、component diff 、element diff 进行了算法优化

详解

tree diff

  • 只会对同一层级(同一颜色)的节点进行比较,如果不同,则这个节点下的所有子节点都会被删除


  • 如下图,如果将A节点的所有子节点都移动到D节点下面,对比的时候发现A节点不见了,就会删除A节点和所有子节点,然后在D节点下重新创建A节点


  • 注意:在开发组件时,保持稳定的 DOM 结构会有助于性能的提升。例如,可以通过 CSS 隐藏或显示节点,而不是真的移除或添加 DOM 节点

component diff

  • 比较组件的类型,如果是同一类型,则继续比较它们的element,如果是不同类型,则直接删除原有节点,增加新节点

  • 如下图,当D节点改变为G节点时,尽管这两个组件结构相似,但是D和G是不同类型的组件,所以不会继续比较,而是直接删除D,重新创建G以及其子节点


element diff

  • 遍历原有集合和新集合中节点的ID,进行移位操作,再进行修改

  • 如下图,两个集合进行通过key进行对比,发现两个集合中的节点都是相同的节点,因此无需进行节点删除和创建,只需要将老集合中节点的位置进行移动,更新为新集合中节点的位置即可,此时React diff的结果是:B、D 不做任何操作,A、C 进行移动操作

一张图概括

参考文章推荐
react精髓之一---diff算法
React 源码剖析系列 - 不可思议的 react diff

相关文章

  • sammary

    vue-diff算法 react 性能优化 diff算法 ,局部更新DOMshouldComponentUpdat...

  • 到底React Fiber架构是个什么

    diff 算法缺陷 diff 算法问题出现在,React 的调度策略 -- Stack Reconfile。这...

  • react(其一)

     react、reactjs、react native、virtual dom、diff算法、redux....,...

  • react VS Vue diff算法

    react diff diff算法的作用:数据更改,生成相应的虚拟DOM,与真实DOM作对比,通过diff算法,对...

  • 面试

    1.React探索-diff算法 tree diff 基于策略一,React 对树的算法进行了简洁明了的优化,即对...

  • React diff算法

    传统的diff算法复杂度是O(n*3),而React diff算法改进了传统的diff算法,将算法复杂度降低到了O...

  • React diff算法

    React的diff算法是React更新组件的一个核心思想,搞懂了它的diff算法,会有助于你开发更高质量的代码,...

  • React基础3--diff算法

    本来想深入说一下virtual dom 与diff,但是最近很忙,就简单聊聊react的diff算法吧。 diff...

  • react项目优化

    前言 传统的Diff算法O(N3),React Diff基于三大前提将复杂度降为O(N) 1.tree diff,...

  • React diff算法

    翻译自:http://calendar.perfplanet.com/2013/diff/,感谢Christoph...

网友评论

      本文标题:React diff算法

      本文链接:https://www.haomeiwen.com/subject/idgdrxtx.html