React进阶篇(三)diff算法

作者: 娜姐聊前端 | 来源:发表于2020-04-19 10:32 被阅读0次

如何计算Virtual Dom中真正变化的部分,这就需要diff算法。

Virtual Dom配合高效的diff算法,才能够快速的渲染改动的页面,而不会渲染整个页面。

1. 跨层级移动

策略:针对节点进行比较。不同层级的节点,只有创建和删除操作。

** 影响性能操作,建议不要进行DOM 节点跨层级的操作。**

图示如下(create A →create B →create C →delete A):

image

2. 同层级父节点移动

策略:

  1. 同类型组件:通过 shouldComponentUpdate() 来判断该组件是否需要进行diff 算法分析(所以可以利用shouldComponentUpdate()来优化组件性能)
  2. 不同类型组件:直接判断为dirty component,从而替换整个组件下的所有子节点

图示如下:


image

3. 同层级子节点移动

策略:对于同一层级的一组子节点,它们可以通过唯一 id 进行区分(这就是为什么在批量创建同类型组件时需要添加key属性,并且建议将key定义为有意义的唯一标示,而不是index索引)。

其提供三种操作方法:

  • INSERT_MARKUP:新的组件类型不在旧集合里,即全新的节点,需要对新节点执行插入操作
  • MOVE_EXISTING:旧集合中有新组件类型,且element 是可更新的类型generateComponentChildren 已调用 receiveComponent,这种情况下 prevChild=nextChild,就需要做移动操作,可以复用以前的DOM 节点。
  • REMOVE_NODE:旧组件类型,在新集合里也有,但对应的element 不同则不能直接复用和更新,需要执行删除操作,或者旧组件不在新集合里的,也需要执行删除操作。

微信公众号:

相关文章

  • (转载)React diff算法(带Vue patch对比)

    React进阶篇(三)diff算法(带Vue patch对比) 源地址:https://www.jianshu.c...

  • React进阶篇(三)diff算法

    如何计算Virtual Dom中真正变化的部分,这就需要diff算法。 Virtual Dom配合高效的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算法O(N3),React Diff基于三大前提将复杂度降为O(N) 1.tree diff,...

  • React diff算法

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

网友评论

    本文标题:React进阶篇(三)diff算法

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