面试官:你知道 React Fiber 吗?我:你是说 调度届的王者?

347 阅读4分钟

👨‍🏫 本系列由前端面试真题博主 Kincy 发起,每日更新一题,通勤路上轻松掌握高频知识点。
📢 如果你想第一时间获取更新,或与群友交流面试经验、内推信息,欢迎加入微信群(文末扫码)!

🧠 系列前言:

面试题千千万,我来帮你挑重点。每天一道,通勤路上、蹲坑时、摸鱼中,技术成长不设限!本系列主打幽默 + 深度 + 面霸必备语录,你只管看,面试场上稳拿 offer!

💬 面试官发问:

“你了解 React Fiber 吗?能说说它的核心原理和解决了什么问题吗?”

哎呀,这题我熟。React Fiber,听起来像个健身品牌,其实是 React 自己下的一盘“大棋”。

🎯 快答区(初级背诵版)

React Fiber 是 React 16 开始引入的新架构,用来优化之前递归更新的流程,解决了无法中断渲染、更新过程不够灵活的问题。Fiber 支持任务拆分、优先级调度和异步渲染,使得用户交互更流畅,页面不卡顿。

面试官:嗯,还行,但我想听点你背不出来的内容 😏

🧠 深入理解:Fiber 究竟是谁?

📌 1. React 旧架构的问题

React 15 及以前的版本在更新组件时,采用的是同步递归的方式:

<MyHugeComponent />

页面越大,递归越深,React 就越像一位卷王:咬牙更新完才休息。

问题是:

  • 你点个按钮,页面卡了 300ms;
  • 你输入表单,光标卡了一下;
  • 用户体验直接下滑成海底捞。

React 团队一拍桌子:我们要让更新能暂停、能恢复、能控制优先级!
于是 Fiber 诞生。

🧱 2. 什么是 Fiber 架构?

通俗点说,Fiber 是 React 的 任务调度中心 + 渲染流水线,是对 Virtual DOM 的一次架构升级。

它的目标是实现可中断、可恢复、可控制优先级的更新流程。

它怎么实现的?

  • 把组件更新任务拆成小块(Unit of Work)
  • 每一块都可以:
    • 执行一点点
    • 暂停
    • 恢复
    • 放到空闲时执行

React:我不再一口气更新到底了,我要 边干活边喘气

🧩 3. Fiber 是什么数据结构?

别怕,这不难!

Fiber 本质上是个双缓冲链表树结构(听起来吓人,画出来就很简单):

每个组件都会生成一个 FiberNode,类似这样:

type FiberNode = {
  type: string | Function;
  child: FiberNode | null;
  sibling: FiberNode | null;
  return: FiberNode | null;
  stateNode: any;
  alternate: FiberNode | null; // 旧节点,用于比较
  effectTag: string;
  // ...还有一些调度相关字段
}

每个节点都是可控的、可遍历的、可“后悔”的!

⏱️ 4. Fiber 的两大阶段

React Fiber 的更新流程分成两个阶段:

阶段名作用是否可中断
Reconciliation构建 Fiber 树(diff)✅ 可以
Commit真实操作 DOM❌ 不行

🚦在第一阶段,React 可以使用浏览器的空闲时间 requestIdleCallback 做点“碎片工作”。

🧠 如果任务来不及做完,React 可以暂停,先处理用户交互(比如你点个按钮),然后回来接着干

🎢 5. 支持优先级调度是怎么回事?

React Fiber 的另一个大招是:给不同的更新任务分等级!

任务类型优先级
用户输入(点击、键盘)
动画
网络请求后的渲染
页面初始化加载

React 使用了自己的调度器(scheduler),确保重要的任务插队处理,低优先级的任务以后再说

💬 面试中可以抛出的装 X 语录

  • “Fiber 是 React 从同步递归向异步可控调度的一次范式转变。”
  • “Fiber 把 Virtual DOM 升级成任务流,赋予了调度权。”
  • “它让我重新相信:写前端也能讲并发。”

(说完记得停顿两秒,喝一口水,看面试官点头)

✅ 总结一句话

React Fiber = 可中断、可恢复、可优先级调度的 Virtual DOM 架构升级版,它让 React 更聪明、更流畅,也为后续的 Concurrent Mode 奠定了基础。

🔚 系列结尾:明日继续爆料!

明天继续来一道面试题,咱们聊聊 React 是怎么做 Virtual DOM diff 的(别看是老生常谈,其实里面猫腻不少🐱)。

📌 点赞 + 收藏 + 关注系列,让你成为面霸不是梦!

📚 本系列每天一题,持续更新中!
👉 扫码加入【前端面试题交流群】,一起成长、交流、内推、分享机会!

微信二维码.png 备注“掘金”优先通过