面试官: 翻译翻译什么 TM 叫 React Fiber

141 阅读1分钟

Fiber 是对 React 核心算法的重构, 核心原理类似于 CPU 时间分片机制, 设备的屏幕刷新率为 FPS 为 60时会很流畅, 当低于此时会出现不同程度的卡顿. 也就是一帧事件 16ms, 而一个渲染过程要经历 处理输入事件 -> 处理定时器 -> 开始帧 -> requestAnimationFrame -> 布局 -> 绘制 -> 空闲阶段.

而由于渲染线程和 JS 线程是互斥的, 旧版会采用递归对比虚拟 DOM 树,找出需要变动的节点,然后同步更新它们, 这个过程 js 会一直占用渲染线程, 会导致上述渲染过程无法进行.

Fiber 将渲染和调度过程分成多个执行单元,react 就会检查现在还剩多少时间,如果没有时间则将控制权让出去

从根节点开始渲染和调度的过程可以分为两个阶段:render 阶段、commit 阶段。

render 阶段:这个阶段是可中断的,会找出所有节点的变更 commit 阶段:这个阶段是不可中断的,会执行所有的变更

render 阶段, React Fiber首先是将虚拟DOM树转化为 Fiber tree, 而 Fiber tree 的数据结构采用的是链表, 包含着父/子/兄节点的指针, 接下来把全部的 fiber 节点遍历一遍,产出最终全部的 effect list

然后 commit阶段 将上阶段计算出来的需要处理的副作用一次性执行, 不可中断

两个重要的 API

requestIdleCallback, requestAnimationFrame