react的filber架构

好问题 👍 你问的是 React Fiber 架构。这是 React 16 引入的核心机制,用来解决 React 在大规模更新时的性能问题。下面我给你从 背景 → Fiber 是什么 → 原理 → 优点 → 流程 来系统讲。


一、为什么需要 Fiber?

在 React 15 及以前,Reconciler(协调器)递归调用 的:

  • 一旦开始遍历虚拟 DOM 树,就会一直执行到更新完成。

  • JS 是单线程的,如果组件树很大,就会长时间阻塞 UI(比如用户输入、动画掉帧)。

👉 React 16 引入 Fiber 架构,实现“可中断的渲染”。


二、Fiber 是什么?

  • Fiber 既是数据结构,又是调度机制。

1. 数据结构(链表树)

  • 旧的虚拟 DOM 是树形结构,Fiber 把它改造成 链表树

  • 每个 Fiber 节点对应一个 React 组件,保存了:

    • type:组件类型(函数 / 类 / DOM 节点)

    • pendingProps / memoizedProps:新旧 props

    • stateNode:真实 DOM 或类组件实例

    • child / sibling / return:指向子节点、兄弟节点、父节点(让树可以“遍历暂停+恢复”)。

2. 调度机制

  • Fiber 把渲染任务拆分成 小块(unit of work)

  • 每完成一个小块,就检查是否有更高优先级的任务(比如用户输入)。

  • 如果有 → 暂停渲染,先去执行高优先级任务;之后再恢复渲染。

👉 这就是所谓的 时间分片(Time Slicing)


三、Fiber 的工作流程

React Fiber 的工作分 两大阶段

1. 调和阶段(Reconciliation / Render Phase)

  • 生成新的 Fiber 树(虚拟 DOM → Fiber 节点)。

  • 可以被中断(异步执行)。

  • 做的事:

    • Diff 新旧 Fiber(比较新旧 props、state、子节点)。

    • 标记需要的更新(Placement / Update / Deletion)。

2. 提交阶段(Commit Phase)

  • 把 Fiber 树的变更同步到真实 DOM。

  • 不能中断(必须一次性完成)。

  • 分三步:

    1. Before Mutation:调用 getSnapshotBeforeUpdate

    2. Mutation:操作 DOM(插入、更新、删除)。

    3. Layout:执行生命周期钩子(componentDidMount / useLayoutEffect)。


四、Fiber 的优点

  1. 可中断渲染:解决 React 15 “一口气渲染完”的问题。

  2. 优先级调度:不同更新任务有不同优先级(比如输入比动画更重要)。

  3. 增量渲染:一次渲染可以拆成多次完成。

  4. 为 Concurrent Mode(并发模式)打基础:React 18 的并发特性基于 Fiber。


五、Fiber 更新优先级(Scheduler)

Fiber 为每个更新任务分配优先级:

  • Immediate:立即执行(比如点击)。

  • User-blocking:高优先级(比如输入)。

  • Normal:普通优先级。

  • Low:低优先级(比如数据预加载)。

  • Idle:空闲时才执行。

React 内部用 Scheduler(调度器) 来管理任务优先级。


六、整体流程总结

  1. 触发更新setState / useState)。

  2. 调度器接管 → 把更新放入任务队列。

  3. 调和阶段(可中断):构建新的 Fiber 树,标记变更。

  4. 提交阶段(不可中断):批量更新真实 DOM。

  5. 渲染完成,用户看到更新。


七、类比理解

可以把 React Fiber 想象成:

  • 旧版 React:写一篇长文章时,必须一次写完,不能停。

  • Fiber React:写文章时,每写几句就停下来,看看是不是有人找你聊(高优先级任务),聊完再继续写文章。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98666.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lucky STUN穿透结合群晖NAS实现docker下transmission监听端口动态更新

参考文章 LCUKY系列教程 一 「LUCKY STUN穿透」使用 cURL 自动修改 Transmission 的监听端口 二 「LUCKY STUN穿透」使用 Webhook 自动修改 qbittorrent 的监听端口 三 LUCKY STUN穿透在Windows上使用UPnP工具为BT客户端自动添加内外端口号不同的映射规则 四「LUCKY STUN穿透」…

如何在Ubuntu畅玩鸣潮等游戏

本教程只包括Steam上的游戏。# 更新软件源 sudo apt update # 安装Steam sudo apt install steam首先,在Ubuntu的snap商店安装Steam,启动,登陆,下载游戏。到这里的操作都比较简单,对于没有反作弊的游戏,往往…

机器学习09——聚类(聚类性能度量、K均值聚类、层次聚类)

上一章:机器学习08——集成学习 下一章:机器学习10——降维与度量学习 机器学习实战项目:【从 0 到 1 落地】机器学习实操项目目录:覆盖入门到进阶,大学生就业 / 竞赛必备 文章目录一、聚类任务(无监督学习…

解决 Docker 构建中 Python 依赖冲突的完整指南

问题背景 在基于 registry.cn-shenzhen.aliyuncs.com/all_dev/dev:invoice-base 镜像构建 Docker 容器时,我们遇到了一个常见的 Python 依赖管理问题: ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-…

光子计算芯片实战:Lightmatter Passage互连架构性能评测

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,80G大显存,按量计费,灵活弹性,顶级配置,学生更享专属优惠。 摘要 随着人工智能计算需求呈指数级增长,传统电子计算…

基于树莓派与Jetson Nano集群的实验边缘设备上视觉语言模型(VLMs)的性能评估与实践探索

概述 2018年,TensorFlow Lite团队的Pete Warden曾提出:“机器学习的未来在于微型化”。如今,随着人工智能向高性能视觉强大的视觉语言模型(Vision-language models, VLMs)发展,对高性能计算资源的需求急剧…

华为Ai岗机考20250903完整真题

华为Ai岗机考20250903 华为自26届秋招(2025年起)对AI岗位机考进行了改革,考试题型调整为20道选择题(15道单选(6分)5道不定项选择(12分))2道编程题(150300)。 题目核心围绕人工智能技术(如Transformer架构…

k8s+jenkins+harbor构建Devops平台

一、环境准备1、准备一主一从k8s机器,(设备好可以一主多从也行)2、一台harbor仓库机器(dockerhub访问不了)二、安装nfs服务1、在k8s机器上yum install nfs-utils -y systemctl start nfs systemctl enable nfs2、创建共…

为什么 socket.io 客户端在浏览器能连上,但在 Node.js 中报错 transport close?

网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…

人才教育导向下:老年生活照护实训室助力提升学生老年照护服务能力

一、老年生活照护实训室建设背景与意义 (一)适应老龄化社会需求 我国老龄化程度持续加深,老年照护服务人才缺口不断扩大。培养专业照护人才成为当务之急,职业教育需承担重要责任。点击获取实训室建设方案 (二&…

我在嘉顺达蓝海的安全坚守

作为嘉顺达蓝海的资深安全员,每天清晨 6 点,我都会站在物流基地的入口处,看着一队队橙色的嘉顺达蓝海危险品运输车整齐列队。那抹醒目的橙色,不仅是嘉顺达蓝海的标志,更是我和 200 多名同事坚守 12 年的安全承诺。今天…

云原生监控系统 Prometheus大总结 20250909

本章内容如下: Prometheus 介绍 Prometheus 部署和配置 Node Exporter 采集数据 Pushgateway 采集数据 PromQL 查询语言 Grafana 图形化展示 Prometheus 标签管理 Prometheus 告警机制 Prometheus 服务发现 各种Exporter 高级功能 Prometheus 实现容器监控 Promethe…

EPNN:基于嵌入式偏振神经网络的水下成像增强方法(未做完)

Enhancing Underwater Imaging for Robot through Embedded Polarization Neural Network EPNN:基于嵌入式偏振神经网络的水下成像增强方法 1 论文核心概念 本文提出了一种名为嵌入式偏振神经网络(Embedded Polarization Neural Network, EPNN) 的方法,用于显著提升水下…

基于单片机冷藏运输车环境检测/水产品运输环境检测设计

传送门 👉👉👉👉单片机作品题目速选一览表🚀 👉👉👉👉单片机作品题目功能速览🚀 🔥更多文章戳👉小新单片机-CSDN博客&#x1f68…

基于STM32设计的人体健康监护系统(华为云IOT)_280

文章目录 一、前言 1.1 项目介绍 【1】项目开发背景 【2】设计实现的功能 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 【6】摘要 1.2 设计思路 1.3 系统功能总结 1.4 开发工具的选择 【1】设备端开发 【2】上位机开发 1.5 参考文献 1.6 系统框架图 1.7 系统原理…

先买实现烦过

#include <myhead.h> #define ERR_LOG(msg)do{perror(msg);printf("%d %s %s\n",__LINE__,__func__,__FILE__);}while(0) //定义TFTP默认端口号&#xff08;69&#xff09;和数据包大小&#xff08;516字节&#xff09; #define PORT 69 #define N 516 …

ACD智能分配:轮流分配和排序上限分配的设置

在客户服务中&#xff0c;合理的对话分配是提高服务质量的关键。一洽客服系统针对不同业务场景,提供灵活的客服分配策略,帮助企业实现智能化的客户服务管理&#xff0c;今天我们了解一下对话的轮流分配、排序上限分配、排序优先分配的设置一、轮流分配按照客服登录系统的先后顺…

【postMan / apifox 文件上传】

apifox 需要提供相关插件 失败的请求 { “timestamp”: “2025-09-10T14:44:24.91900:00”, “status”: 500, “error”: “Internal Server Error”, “path”: “/student/import” } 错误&#xff1a;Post “http://localhost:8080/student/import”: dial tcp [::1]:8080:…

视频加水印,推荐使用运营大管家-视频批量加水印软件

运营大管家-视频批量加水印软件介绍“运营大管家-视频批量加水印”是一款功能强大的桌面应用程序&#xff0c;旨在帮助用户高效地为多个视频批量添加自定义水印。无论是品牌宣传、版权保护&#xff0c;还是个性化展示&#xff0c;本软件都能提供灵活的文字水印和图片水印选项&a…

基于 Dockerfile 构建镜像

1.准备构建上下文[roothost1 ~]# mkdir dockerfile-test && cd dockerfile-test [roothost1 dockerfile-test]# touch nginx.repo [roothost1 dockerfile-test]# touch Dockerfile [roothost1 dockerfile-test]# vi nginx.repo [roothost1 dockerfile-test]# cat nginx…