0%

React Fiber

  • React现在的渲染都是由Fiber来调度
  • Fiber调度过程中的两个阶段(以Render为界)
产生原因
  1. Fiber之前的reconciler(被称为 Stack reconciler )自顶向下的递归mount/update,无法中断(持续占用主线程),这样主线程上的布局、动画等周期性任务以及交互响应就无法立即得到处理,影响体验
  2. 渲染过程中没有优先级
React Fiber的方式

把一个耗时长的任务分成很多小片,每一个小片的运行时间很短,虽然总时间依然很长,但是在每个小片执行完之后,都给其他任务一个执行的机会,这样唯一的线程就不会被独占,其他任务依然有运行的机会

React Fiber把更新过程碎片化,执行过程如下面的图所示,每执行完一段更新过程,就把控制权交还给React负责任务协调的模块,看看有没有其他紧急任务要做,如果没有就继续去更新,如果有紧急任务,那就去做紧急任务。

维护每一个分片的数据结构,就是Fiber。

Fiber的调度过程分为以下两个阶段:

render/reconciliation阶段 ===> 里面的所有生命周期函数都可能被执行多次,所以尽量保证状态不变

  • componentWillMount
  • componentWillReceiveProps
  • shouldComponentUpdate
  • componentWillUpdate

Commit阶段 ===> 不能被打断,只会执行一次

  • componentDidMount
  • componentDidUpdate
  • compoenntWillunmount

总结:新的Fiber 分片处理任务,当有紧急任务的时候,可以去优先处理紧急任务然后再回来调用

欢迎关注我的其它发布渠道