react-fiber以及schduler机制

浏览器的执行主线程是唯一能执行任务的线程,js执行和GUI渲染执行是互斥,当执行了js就会阻塞渲染

React16.8以前采用的是stack reconcil 栈处理组件的构建和渲染,这样就无法进行任务优先级区分,也会导致js执行阻塞UI渲染问题,造成页面卡顿。

React16.8以后将内部组件层改成Fiber这种数据结构(本质就是一个js对象),因此它的架构名也改叫Fiber架构。Fiber节点拥有return, child, sibling三个属性(就是链表的指针),分别对应父节点, 第一个孩子, 它右边的兄弟, 有了它们就足够将一棵树变成一个链表, 实现深度优化遍历

react-fiber以及schduler机制_第1张图片

react-fiber以及schduler机制_第2张图片

react-fiber以及schduler机制_第3张图片

递归是无法中断的,而循环可以!!

fiber是如何进行任务调度 (schduler)

如何知道什么时间进行任务切换(过期时间已到或已执行完毕)

什么时候恢复任务执行?(while wookLoop)

任务的优先级是依据什么进行划分的?(任务的过期时间taskQueue,timeQueue)如何判断任何执行程度?(任务函数的返回值,如果返回是任务函数本身则表示执行未完成)

  1. react的调度机制

react-fiber以及schduler机制_第4张图片

注明:浏览器一帧会做什么

react-fiber以及schduler机制_第5张图片

任务的优先级是依据什么进行划分的?

react-fiber以及schduler机制_第6张图片

react-fiber以及schduler机制_第7张图片

react-fiber以及schduler机制_第8张图片

任务的调度者:

react-fiber以及schduler机制_第9张图片

react-fiber以及schduler机制_第10张图片

事件中断与重新执行

react-fiber以及schduler机制_第11张图片

react-fiber以及schduler机制_第12张图片

react-fiber以及schduler机制_第13张图片

react-fiber以及schduler机制_第14张图片

参考来源:

https://zhuanlan.zhihu.com/p/347522106

https://zhuanlan.zhihu.com/p/538096803 https://blog.csdn.net/weixin_42232156/article/details/129933030 https://zhuanlan.zhihu.com/p/343927857

https://zhuanlan.zhihu.com/p/343754137

https://zhuanlan.zhihu.com/p/357082574

你可能感兴趣的:(react.js,前端,前端框架)