现代 React Web 开发实战
宋一玮
FreeWheel 中国研发中心前端架构师
16115 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 31 讲
现代 React Web 开发实战
15
15
1.0x
00:00/00:00
登录|注册

加餐02|留言区心愿单:Fiber协调引擎

你好,我是宋一玮,欢迎回到 React 应用开发的学习。
之前提到过,我们会在专栏的留言区选取一些具有代表性的问题,放到加餐里统一讲解。
上次的加餐 01 我们介绍了“真·子组件”,以及 JSX 语法糖在 React 17 版本以后发生的变化。这节加餐我们有且只有一个主题,就是目前留言区呼声最高的,Fiber 协调引擎。
首先还是要说明一下,在 React 18.2.0 中,Fiber 的源代码有 3 万多行(以 wc -l packages/react-reconciler/src/*[^new].js 命令统计),要想搞清它的每一行代码都是干什么的,一节加餐是远远不够的。
这节加餐会从原理入手,介绍 Fiber 内的部分重要模型和一些关键流程,并尽量跟前面课程中学到的 React 各种概念串联起来,这包括 React 元素、渲染过程、虚拟 DOM、生命周期、Hooks。不求面面俱到,为的是帮助你加深对 React 框架的理解。
另外请注意,Fiber 协调引擎是 React 的内部实现,无论是否学习它,都不会影响你对 React 框架的使用。

什么是 Fiber 协调引擎?

正如第 6 节课讲到的:
React 组件会渲染出一棵元素树……每次有 props、state 等数据变动时,组件会渲染出新的元素树,React 框架会与之前的树做 Diffing 对比,将元素的变动最终体现在浏览器页面的 DOM 中。这一过程就称为协调(Reconciliation)
在 React 的早期版本,协调是一个同步过程,这意味着当虚拟 DOM 足够复杂,或者元素渲染时产生的各种计算足够重,协调过程本身就可能超过 16ms,严重的会导致页面卡顿。而从 React v16 开始,协调从之前的同步改成了异步过程,这主要得益于新的 Fiber 协调引擎
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

React中的Fiber协调引擎是本文的重点,它通过异步过程提高了性能,避免页面卡顿。文章详细介绍了Fiber的工作类型、Fiber Tree树形结构、Fiber数据、Effect副作用等方面,以及与Hooks相关的模型。Fiber协调引擎的工作流程包括渲染阶段和提交阶段,其中涉及到Fiber树的遍历、节点的更新记录、Hooks的处理以及提交阶段的子阶段执行顺序。此外,文章还提到了Fiber协调引擎的Diffing算法在整个流程中的应用,以减少不必要的工作,提高性能。通过对Fiber协调引擎的介绍,读者可以加深对React框架的理解,了解其内部工作原理。整体而言,本文内容技术性较强,适合对React开发有一定了解的读者阅读,有助于深入理解React框架的内部实现。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 React Web 开发实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 学习前端-react
    感谢宋老师的精彩加餐。目前看下来一餐可能不太够,有点囫囵吞枣的感觉。

    作者回复: 你好,学习前端-react,感谢你的认可。Fiber协调引擎能讲的东西确实很多,这节短短的加餐很难讲全。加餐主要的目的,还是希望能用Fiber协调引擎的基本原理把前面学到的React概念、API串联起来,帮大家更好地掌握React开发。 加餐心愿单依然开放,欢迎接着提 :)

    2022-09-29归属地:北京
    2
  • joel
    要是有视频就更好,老师辛苦了

    作者回复: 你好,joel,只要你有收获我就不辛苦(握手)。最近专栏编辑跟我有讨论过连载完结时的一些策划,里面有可能有视频。

    2022-09-23归属地:北京
    2
  • 乐雨
    没有讲到任务优先级和饥饿问题的处理

    作者回复: 你好,乐雨,感谢你的留言,这篇加餐主要关注了React源码中packages/react-reconciler的内容,确实没有讲到 packages/scheduler,即任务优先级和调度相关的内容。Scheduler也是React内部的重要模块,之后有机会再为大家介绍。

    2022-09-26归属地:北京
    1
  • 学习前端-react
    请问:修改state 是生成fiber 并 diffing的过程?

    作者回复: 你好,学习前端-react,从结果来看,你的说法是ok的。 在reconciler内部,修改state会把更新加入到更新队列里,并标记fiber待更新,在完成高优先级的工作以后,scheduler(另一个包)会从队列中拿出更新工作,放到下一轮render阶段,并做diffing。 所以整体而言修改state是异步的,这也使得React也有足够空间可以调整工作的优先级,合并多个state修改、做批处理。

    2022-09-29归属地:北京
  • 潮汐
    这篇加餐结合正文课程第6、8节和文中的图,对渲染、协调有更深的理解。与6、8节正文的图形成互相诠释说明,值得反复对比理解!
    2023-02-19归属地:广东
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部