React 18 的 Fiber 算法(超级通俗版 + 面试必背)
我用最简单、最核心、不绕弯 的方式,一次性讲透 Fiber 到底是什么、为什么、怎么工作。
一、一句话终极结论
Fiber = React 16 之后的全新虚拟DOM架构 + 可中断/可恢复/可优先级调度的渲染引擎
它是 React 并发渲染(Concurrent Mode)的底层基石!
二、为什么要有 Fiber?(痛点)
老 React(15 及以前)
- 递归 diff,一旦开始,就不能停
- 渲染耗时 > 16ms → 页面卡顿、掉帧
- 主线程被霸占,输入框、点击事件都卡住
问题:同步递归渲染 = 阻塞主线程
Fiber 解决的核心问题
把大任务拆成小任务,分片执行,能暂停、恢复、中止、插队
保证页面永远流畅不卡顿。
三、Fiber 是什么?(超简单理解)
- Fiber 是一个 JavaScript 对象
- 每个虚拟DOM节点 → 对应一个 Fiber 节点
- 形成一棵链表树(不是普通树)
- 可以断点执行、记录暂停位置
它的作用只有一个:
让渲染过程变成可中断、可调度的任务。
四、Fiber 两个阶段(最重要)
1. Reconciliation(协调 / Render 阶段)------ 可中断
- 做:diff、找到变化
- 可以被暂停、恢复、放弃
- 不操作 DOM
- 底层用
requestIdleCallback思想
2. Commit(提交阶段)------ 不可中断
- 做:把变化一次性更新到 DOM
- 一旦开始必须执行完
- 保证 DOM 稳定、不闪烁
五、Fiber 链表结构(怎么实现中断)
Fiber 不是父子递归,而是三个指针:
child第一个子节点sibling兄弟节点return父节点
遍历方式:单边循环(while),不是递归
→ 随时可以暂停,下次接着跑。
六、Fiber 和 React 18 并发的关系
Fiber = 地基
Concurrent Mode = 功能
React 18 所有强大功能都靠 Fiber:
- 可中断渲染
- 优先级调度
- 自动批处理
- Suspense
- useTransition / useDeferredValue
没有 Fiber,就没有 React 18!
七、Fiber VS Vue3 渲染(必背对比)
| 特性 | React Fiber | Vue3 渲染 |
|---|---|---|
| 渲染方式 | 可中断、分片、优先级 | 一次性执行、不可中断 |
| 架构 | Fiber 链表 | 递归+微任务批量更新 |
| 并发渲染 | ✅ 支持 | ❌ 不支持 |
| 页面流畅度 | 极高 | 高 |
| 复杂度 | 极高 | 低 |
八、面试标准答案(背这个稳过)
问:React 18 的 Fiber 是什么?解决了什么问题?
答:
Fiber 是 React 16 提出的新架构,将虚拟DOM改造为可中断的 Fiber 链表结构。
它把原本同步阻塞的递归 diff,拆分成可暂停、可恢复、可优先级调度的小任务,
解决了老版本渲染卡顿问题,是 React 18 并发渲染的底层基础。
九、超级总结(最精简记忆)
- Fiber = 可中断的渲染架构
- 拆大任务为小任务,不卡主线程
- Render 阶段可中断,Commit 阶段不可中断
- 是 React 18 并发、自动批处理、Suspense 的基石
- Vue3 没有 Fiber,也没有并发渲染
如果你愿意,我可以给你整理
《React 最核心 3 大底层原理:Fiber + Diff + 事件系统》
面试 90% 会问!要吗?