美文网首页
react diff算法

react diff算法

作者: sun_hl | 来源:发表于2021-07-28 15:58 被阅读0次

diff算法的作用?

计算出虚拟dom中变化的部分,并只针对该部分进行原生dom的操作,而不是对整个页面重新渲染。

传统的diff算法就是使用循环递归的方式,时间复杂度是O(n^3)

React diff算法:调和是diff算法的具体实现。

调和是react将虚拟dom转换成真实dom的最少操作过程。

react用三大策略将O(n^3)变成O(n)复杂度。

1、tree diff 2、component diff 3、element diff

tree diff

1、react通过updateDepth对虚拟dom树进行层级控制。

2、对树分层比较,两棵树只对同一层节点进行比较。如果该节点不存在时,则该节点和其子节点会完全被删除,不会在进一步比较。

3、只需遍历一次,就可完成整棵DOM树的比较。如果跨层级的话,只有创建节点和删除节点的情况。

component tree

React对不同的组件间的比较,有三种策略

1、同一类型的2个组件,按照原策略(层级比较)继续比较虚拟dom树即可。

2、同一类型的两个组件,组件A变化为组件B时,可能虚拟dom没有任何变化,如果知道这点(变换的过程中,Virtual DOM没有改变),可节省大量计算时间,所以 用户 可以通过 shouldComponentUpdate() 来判断是否需要 判断计算。

3、不同类型的组件,将被改变的组件判定为dirty component组件,从而替换整个组件的所有节点。

element diff

当节点处于同一层级时,diff提供了3种节点的操作,插入、移动、删除。

插入操作:新的component 类型不在老集合里, 即是全新的节点,需要对新节点执行插入操作。

删除操作:老 component 类型,在新集合里也有,但对应的 element 不同则不能直接复用和更新,需要执行删除操作,或者老 component 不在新集合里的,也需要执行删除操作。

移动操作:

1、新旧集合中存在相同节点但位置不同时,如何移动节点。

2、新集合中有新加入的节点,旧集合中有删除的节点。

下标index移动,先从新的中取出B元素,然后在看旧的里面是否存在B,如存在,就去判断是否移动。B在旧的里面index=1,它的lastIndex=0,不满足index<lastIndex,所以B不一定,此时lastIndex= Math.max(index,lastIndex)较大数 = 1;下面的元素依次这样移动。

相关文章

  • 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/wxpqkltx.html