前端技术分享:从Context源码实现谈React性能优化

学完这篇文章,你会收获:

  1. 了解Context的实现原理

  2. 源码层面掌握React组件的render时机,从而写出高性能的React组件

  3. 源码层面了解shouldComponentUpdateReact.memoPureComponent等性能优化手段的实现

我会尽量将文章写的通俗易懂。但是,要完全理解文章内容,需要你掌握这些前置知识:

  1. Fiber架构的大体工作流程

  2. 优先级更新React源码中的意义

如果你还不具备前置知识,可以先阅读React技术揭秘

组件render的时机

Context的实现与组件的render息息相关。在讲解其实现前,我们先来了解render的时机。

换句话说,组件在什么时候render

这个问题的答案,已经在React组件到底什么时候render啊 聊过。在这里再概括下:

React中,每当触发更新(比如调用this.setStateuseState),会为组件创建对应的fiber节点。

fiber节点互相链接形成一棵Fiber树。

有2种方式创建fiber节点:

  1. bailout,即复用前一次更新该组件对应的fiber节点作为本次更新的fiber节点。

  2. render,经过diff算法后生成一个新fiber节点。组件的render(比如ClassComponentrender方法调用、FunctionComponent的执行)就发生在这一步。

经常有同学问:React每次更新都会重新生成一棵Fiber树,性能不会差么?

React性能确实不算很棒。但如你所见,Fiber树生成过程中并不是所有组件都会render,有些满足优化条件的组件会走bailout逻辑。

比如,对

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值