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
英文地址,請注明出處:http://en.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…