React Fiber架构解决了什么问题

因为浏览器中,JS引擎和渲染线程在主线程上存在互斥机制;当其中一个线程执行时,另一个线程只能挂起等待,所以JS线程长期占用了主线程,那么渲染线程就要长期等待,因此导致界面长期间不更新,页面响应变差,用户体验不好

因此React引入了Fiber机制:

Fiber把渲染过程拆分成多个子任务,每次只执行一小部分,执行完之后判断是否还有剩余时间,如果有则继续执行下个小任务;如果没有则中断挂起当前任务,把控制权交给主线程,等主线程空闲时,再次恢复上个子任务继续执行

1、Fiber为每个任务增加了优先级,优先级高的任务可以终端优先级低的任务,高优先级任务执行结束后,重新执行被中断的任务或者执行下一个任务

2、增加异步任务,通过调用浏览器requestIdleCallback API,可以在浏览器空闲时执行后台和低优先级工作,而不影响页面动画和输入响应

3、dom diff树变成单链表结构,一个dom对应两个fiber(一个链表);对应两个队列,从而为了找了被中断的任务,重新执行

Fiber是一个JS对象,包含了元素的信息、该元素的更新操作队列、类型等

额外补充React 16版本之前的架构知识:

React15及之前使用的是 Stack Reconciler(栈协调器) 架构;采用深度优先的方式递归处理组件,无法中断;一旦开始渲染,必须一次性完成整个组件树的更新,无法中途暂停;导致页面卡顿掉帧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容