当前位置: 首页 > news >正文

React Fibber架构设计理解

React Fibber架构设计理解

前置知识

了解前端的人应该都听过:JavaScript 是单线程的,浏览器是多线程的

对于多线程浏览器来说,除了要处理JS的线程外,还需要处理包含事件系统、定时器/延时器、网络请求等各种任务线程。当然也包含了DOM的UI渲染。而JS又是可以操作DOM的

这就意味着JS线程和渲染是互斥的,这两个线程不能穿插执行,必须串行,当其中一个线程执行时,另一个线程只能挂起等待

具有相似特征的还有事件线程,浏览器Event-loop机制决定了事件任务是由一个异步队列来维持的,当事件被触发时,对应的任务不会立刻被执行,而是由事件线程把它添加到任务队列的末尾,等待JS的同步代码执行完毕后,在空闲时间里执行出队

这种机制下,JS线程长时间占用了主线程,在用户眼中就是所谓的“卡顿”,其实在渲染层面来说,就是在等待界面更新。试想一下,作为用户,当我们使用的页面卡顿之后,一般会做什么?于我而言,我会在页面反复点击。但当我点击触发的事件,事件线程其实也在等待JS,这就是为什么我们点击也无济于事。这其实也是Stack Rconciler(React 协调引擎)后期面临的困境。

为什么会出现这样的困局

出现这一困境的原因是:Stack Rconciler是一个同步递归的过程。这里简单说一下同步递归的原理:

当在调用setState时,React会立即比对虚拟DOM,这个过程是深度优先遍历,利用了JS原生的函数调用栈。它的工作方式:一旦开始,React就会递归处理每一个组件,知道整颗树对比完成;**不可中断性:JS是单线程的,所以一旦React开始递归后,页面就开始出现”卡顿“,尤其是组件树特别深的情况下,卡顿更明显。

什么是Fiber,它是如何解决问题的

Fiber解决的就是同步递归的问题,所以在React16版本后重写了底层框架,引入Fiber。Fiber将原本密不可分的同步递归工作拆分成了很多小的工作单元。从架构层面来看,Fiber是对React核心算法的重写,从编码角度来看,Fiber是Fiber树节点的单位,从工作流的角度来看,Fiber节点保存了组件需要更新的状态和副作用。
按照React官方的说法,Fiber架构应用的目的是实现“增量渲染”(将一个渲染任务分解为多个渲染任务,而后将其分散到多个帧里面),实现增量渲染的目的是为了实现任务可中断、可恢复,并给不同的任务赋予不同的优先级,最终达成更加顺滑的用户体验。

Fiber架构核心:可中断、可恢复、优先级

从图中我们可以看到为了实现可中断和优先级,两层架构变成了三层架构。在这套架构模式下,更新的工作流变成了这样:首先每个更新任务(假设为A)都会被赋予一个优先级。当更新任务抵达调度器时,高优先级的更新任务会更快的被调度到Reconciler层,此时若有新的更新任务(假设为B),抵达调度器,调度器会先检查它的优先级,如果此时B的优先级任务比A高,那么当前处于Reconciler层的A任务会中断,调度器会将任务B推入到Reconciler层,当B任务完成渲染后,新一轮调度开始,之前被中断的A任务会重新被推入Reconciler层,继续它的渲染之旅,这就是“可恢复”

image

为什么React19的Fiber更强大

在React19版本中,Filber实现了更智能的资源管理

  1. 自动批处理强化:利用Fiber任务调度的特性,更多的状态更新被合并,减少重复渲染。
  2. Server Components深度整合:Fiber能够处理流式渲染,让组件在服务端生成后,分批次注入到客户端的Fiber树中。
  3. Transition优化:在React19中 useTransition可以完美地非紧急更新标记为低优先级,确保搜索框永远是丝滑的。
http://www.jsqmd.com/news/444447/

相关文章:

  • 2026年国内信号屏蔽仪品牌排名推荐,助您选择更具品质保障的产品 - 睿易优选
  • 嘎嘎降AI vs 学术猹 vs PaperYY降AI:同一篇论文三个结果 - 还在做实验的师兄
  • 博士论文降AI用什么工具?高要求场景下只推荐这2款 - 还在做实验的师兄
  • 论文降AI后查重率飙升怎么办?一招搞定两全其美 - 还在做实验的师兄
  • 【MySQL 数据库】MySQL 数据库核心概念详解:库、表、字段、主键与关系型模型一文读懂 - 指南
  • AI 模型服务化实战:FastAPI + vLLM 高性能部署指南
  • ARC092F - Two Faced Edges - Link
  • Logstash
  • 均值不等式初步介绍
  • 最小二乘问题详解13:对极几何中本质矩阵求解
  • 2026年西宁漏水检测维修标杆机构最新推荐:消防管道漏水检测、卫生间漏水检测、厨房漏水检测、暗管漏水检测、地埋管线查漏水、厂房漏水检测、西宁斌瑶精准定位破解漏水难题 - 海棠依旧大
  • 2026年8款主流降AI工具横评:亲测避坑,谁才是论文降重刚需首选? - 晨晨_分享AI
  • 无人机战场侦察 6 类军事目标检测数据集(10,000张图片已划分、已标注)| AI训练适用于目标检测任务
  • getit
  • 2026年3月西宁漏水检测维修机构选择指南:漏水检测、查漏水、防水维修、厨房漏水、厂房漏水、地埋管线、漏水点定位机构 - 海棠依旧大
  • 2026年8款主流降AI工具横评:亲测避坑,谁才是论文降重刚需首选? - 老米_专讲AIGC率
  • 著名的独立开发者 Clara 为什么还是选择了成立团队,以及一些经验
  • 省选 2026 知识点梳理
  • 论文AI率降低实用指南:热门工具横评与实战方案 - 仙仙学姐测评
  • Energy Distance:度量两个多元分布差异的统计方法
  • 论文AI率过高怎么办?实用降AI工具横评与高效应对指南 - 晨晨_分享AI
  • 论文AI率怎么降?2026年实用工具与方法全指南 - 仙仙学姐测评
  • 封神级训诂入门|方一新《训诂学概论》,读懂古籍的钥匙就在这本能
  • 论文AI率降低实用指南:热门工具横评与实战方案 - 晨晨_分享AI
  • 2026年北京婚姻律师推荐:海淀/朝阳/昌平三区资深团队测评,从专业度到服务体验的选型指南 - 小白条111
  • QGraphicsObject学习
  • 深入解析:决策树三大核心算法详解:ID3、C4.5与CART
  • 2026年北京遗产继承律师推荐:从专业度到服务体验的深度测评 - 小白条111
  • Redis深度避坑:从命令陷阱到主从复制的生产级实战指南
  • 岐金兰AI元人文的思想史意义再定位