React推出Fiber,是为了解决某些性能问题,并提供一些新的功能;
在传统的React架构中,采用了递归的方式去创建虚拟Dom,递归的过程是不能中断的,如果数据量级很大,递归的层级很深,递归会占用线程的时间很长,因为JS是单线程的,JS引擎和渲染引擎互斥,所以当递归占用线程时,UI渲染线程就会一直处于等待中,所以用户会感受到页面卡顿,这样子用户体验不好。
因此React推出了Fiber,是React的核心算法,Fiber架构有两个特性,第一:动态优先级,第二:可中断渲染,
其中动态优先级呢,会给每一个任务都分配一个权重值,表示它的顺序,它的优先级,React在协调过程中,会动态调整任务的一个执行顺序,他会优先执行优先级比较高的任务,后执行优先级比较低的任务,这样的方案呢,解决了传统架构中,所有任务都是相同优先级的而且都是一次性执行的问题,从而提升了框架的加载性能;
可中断渲染,它允许react渲染过程中,对任务进行暂停,然后适当的时机再重启;这样的机制呢,解决了传统架构中渲染师单次且执行不停止引发的渲染阻塞,导致页面卡顿的问题;
在React Fiber中,渲染过程时分帧进行的,当React在执行任务中,如果发现某个任务的执行时间,超过了当前帧的剩余时间,它会先把这个任务暂停,把控制权交给浏览器去执行UI渲染,然后在下一帧继续去执行没有执行完成的任务,从而避免了了UI阻塞问题。
此外呢,Fiber架构还提供了很多其他的功能,比如说更好的动画支持,更好的浏览器渲染事件处理,更好的同步/异步渲染支持,更好的可访问性支持,