RN的Fabric 渲染流程

RN 的 Fabric 渲染流程是 React Native 新架构(New Architecture)的核心部分。相比旧架构(Bridge + UIManager),Fabric 最大变化是:

  • JS 不再通过异步 Bridge 创建 Native View

  • 使用 JSI 直接通信

  • 引入 Shadow Tree(C++)

  • 使用 Concurrent React 渲染模型

  • Native View 创建变成 同步可控的 Commit 流程

下面从 React 组件到屏幕显示完整拆解。


1. Fabric 整体架构

复制代码
                JavaScript
                    |
                    |
              React Renderer
                    |
                    |
                  JSI
                    |
                    |
        +-----------------------+
        |       Fabric C++       |
        |                        |
        |  Shadow Tree            |
        |  Shadow Node            |
        |  Layout                 |
        |  Commit                 |
        +-----------------------+
                    |
                    |
              Mounting Layer
                    |
                    |
              Native UI View
        (UIView / Android View)

2. React 创建组件

例如:

复制代码
function App(){

 return (
   <View>
      <Text>Hello</Text>
   </View>
 )

}

React 执行:

复制代码
React Element
      |
      ↓
Fiber Node

React Fiber 负责:

  • diff

  • reconciliation

  • scheduling

注意:

这里还没有创建 Android View / iOS UIView。


3. React Fiber 进入 Fabric Renderer

React Native 有自己的 Renderer:

旧:

复制代码
React
 |
UIManager
 |
Bridge
 |
Native

Fabric:

复制代码
React
 |
Fabric Renderer
 |
C++ Shadow Tree

React 调用:

复制代码
createInstance()

例如:

复制代码
<View/>

对应:

复制代码
ViewComponentDescriptor
        |
        |
ShadowNode

4. 创建 Shadow Tree

Fabric 最大的变化:

引入 C++ Shadow Tree。

例如:

React:

复制代码
<View>
   <Text/>
</View>

Fabric 内部:

复制代码
ShadowTree

RootShadowNode
       |
       |
ViewShadowNode
       |
       |
TextShadowNode

每个节点:

复制代码
ShadowNode
{
 type
 props
 children
 layoutMetrics
}

例如:

复制代码
ViewShadowNode
{
 width:100,
 height:50,
 backgroundColor:red
}

5. Layout计算

Fabric 使用:

Yoga Layout Engine

计算:

  • width

  • height

  • position

例如:

React:

复制代码
<View
 style={{
   width:100,
   height:50
 }}
/>

进入:

复制代码
Yoga
 |
 |
LayoutMetrics

结果:

复制代码
{
x:0,
y:0,
width:100,
height:50
}

保存在:

复制代码
ShadowNode.layoutMetrics

6. Commit阶段(核心)

Fabric 的核心:

复制代码
React Fiber
      |
      |
Commit
      |
      |
ShadowTree Commit

生成:

复制代码
New Shadow Tree

例如:

旧:

复制代码
Root

View
 |
Text

更新:

复制代码
Root

View
 |
Text
 |
Image

Fabric 不直接修改 Native View。

而是:

生成新的 Tree:

复制代码
Old Tree

      ↓

New Tree

      ↓

Diff

7. Diff Shadow Tree

比较:

复制代码
Old Shadow Tree

        VS

New Shadow Tree

产生:

Mutation List:

例如:

复制代码
CREATE Text
INSERT Text
UPDATE Props
REMOVE View

类似:

复制代码
[
 {
  type:"Create",
  node:"Text"
 },
 {
  type:"Update",
  node:"View"
 }
]

8. Mount阶段

Commit完成后:

进入:

复制代码
Mounting Layer

负责:

把 Shadow Node 映射成真实 Native View。

流程:

复制代码
ShadowNode

   |
   |
MountInstruction

   |
   |
UIView / Android View

例如:

iOS:

复制代码
TextShadowNode

       ↓

RCTText

       ↓

UILabel

Android:

复制代码
TextShadowNode

       ↓

ReactTextView

       ↓

TextView

9. Native View创建

Fabric 使用:

ComponentDescriptor

负责:

复制代码
ShadowNode
    |
    |
Native View

例如:

View:

复制代码
ViewComponentDescriptor
        |
        |
RCTView

Text:

复制代码
TextComponentDescriptor
        |
        |
RCTTextView

10. 完整流程图

复制代码
JS

<App/>

 |
 |
React Fiber

 |
 |
Fabric Renderer

 |
 |
JSI

 |
 |
C++ Shadow Tree

 |
 |
Create ShadowNode

 |
 |
Yoga Layout

 |
 |
Commit

 |
 |
Calculate Mutation

 |
 |
Mounting Layer

 |
 |
Create Native View

 |
 |
屏幕显示

Fabric 和旧架构区别

旧架构 Fabric
通信 Bridge JSI
线程 异步 更同步
UI管理 UIManager Fabric Renderer
布局 Native/UIManager C++ Yoga
节点 Native Shadow Tree C++ Shadow Tree
更新 批量Bridge消息 Commit Mutation
React Concurrent 不支持 支持

Fabric 为什么更快?

1. 去掉 Bridge JSON 序列化

旧:

复制代码
JS

JSON

Bridge

Native

大量:

复制代码
serialize
deserialize
copy

Fabric:

复制代码
JS
 |
JSI
 |
C++

直接调用。


2. C++ Shadow Tree

布局和diff:

从 Java/ObjC:

移动到:

复制代码
C++

减少跨语言调用。


3. 支持 Concurrent React

React 可以:

复制代码
Render
暂停
恢复
丢弃
重新计算

例如:

用户输入:

复制代码
高优先级

列表渲染:

复制代码
低优先级

可以打断。


Fabric源码关键模块

RN源码:

复制代码
ReactCommon/react/renderer

主要:

复制代码
core/
 |
 |-- ShadowNode
 |-- ShadowTree
 |-- Mounting
 |-- LayoutableShadowNode
 |
components/
 |
 |-- view
 |-- text
 |-- image

关键类:

ShadowNode

复制代码
ShadowNode.h

代表JS组件节点。

ShadowTree

复制代码
ShadowTree.h

管理整棵树。

MountingCoordinator

复制代码
MountingCoordinator.cpp

生成Mount任务。

UIManager

Fabric版本:

复制代码
FabricUIManager

负责Native挂载。


一句话总结

Fabric 的渲染流程就是:

React Fiber 产生更新 → Fabric Renderer 创建 C++ Shadow Tree → Yoga 计算布局 → Commit生成Mutation → Mounting Layer执行 → 创建/更新 Native View → 屏幕显示。

如果从源码角度看,核心链路就是:

复制代码
ReactFiber
 ↓
RCTFabricSurface
 ↓
ShadowTree::commit()
 ↓
MountingCoordinator
 ↓
UIManager::mount()
 ↓
RCTView / Android View

这也是理解 RN 新架构(Fabric + TurboModule + JSI)的核心入口。

相关推荐
excel34 分钟前
研究 Vue 3 源码的收获
前端·vue.js
归秋14237 分钟前
2026 企业 AI 办公工具选型指南:从评估框架到产品适配
大数据·运维·人工智能
Android系统攻城狮1 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
硅基手札2 小时前
【Linux内核专栏 14】网络协议栈
linux·运维·网络协议
可乐鸡翅yeah_2 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx3 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师3 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow3 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路3 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他4 小时前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程