深度技术解析React Native 0.76+

React Native
新架构

告别 Bridge,拥抱 JSI。Fabric 渲染器、TurboModules、Codegen 三大支柱如何彻底重塑 React Native 的性能基线与开发体验?本文将从架构原理到数据流,为你拆解每一个核心模块。

~40%
启动提速
~30%
内存降低
60fps+
帧率提升
100%
类型安全
架构对比

旧架构 vs 新架构

从异步 Bridge 到同步 JSI,这是一次彻底的底层革命

旧架构 (Bridge)

异步 JSON 序列化通信
Bridge 是异步的,无法同步调用原生方法
单线程批处理瓶颈
所有消息经过 Bridge 排队,导致延迟
原生模块全量初始化
启动时加载全部模块,浪费内存和时间
无类型安全保障
JS ↔ Native 边界运行时才暴露错误
JS ThreadBridge (JSON)Native

新架构 (JSI)

JSI 同步直接调用
C++ 对象持有引用,JS 可直接调用原生方法
Fabric 并发渲染
支持多线程渲染,告别主线程卡顿
TurboModules 按需加载
懒加载原生模块,启动速度大幅提升
Codegen 编译期类型检查
TypeScript/Flow 类型自动生成原生代码
JS ThreadJSI (C++ Direct)Native
三大支柱

新架构核心模块

JSI · Fabric · TurboModules 构成了新架构的完整骨架

JSI

JavaScript Interface

JSI 是新架构的基石。它取代了旧的 Bridge,允许 JavaScript 引擎直接持有对 C++ 宿主对象的引用。JS 可以像调用普通对象方法一样同步调用原生功能,无需 JSON 序列化,也无需异步等待

同步调用
直接内存访问,零序列化开销
引擎无关
可适配 Hermes、V8、JSC
共享内存
JS 与 Native 共享 C++ 堆
双向引用
原生对象可持有 JS 回调引用
JSI C++ 概念示例
// JSI HostObject — JS 端可直接调用的方法
class NativeCalculator : public jsi::HostObject {
  jsi::Value get(jsi::Runtime& rt, const jsi::PropNameID& name) override {
    auto methodName = name.utf8(rt);
    
    if (methodName == "add") {
      // 返回一个 JS 可直接调用的函数
      return jsi::Function::createFromHostFunction(
        rt, name, 2,
        [](jsi::Runtime& rt, const jsi::Value& thisVal,
           const jsi::Value* args, size_t count) -> jsi::Value {
          double a = args[0].getNumber();  // 同步读取!
          double b = args[1].getNumber();
          return jsi::Value(a + b);        // 同步返回!
        }
      );
    }
    return jsi::Value::undefined();
  }
};

Fabric

全新的渲染系统,将 Shadow Tree 的构建从 Java/Objective-C 迁移到 C++, 实现跨平台共享和并发渲染。

并发渲染 (Concurrent)
支持 Suspense
简化跨平台渲染逻辑

TurboModules

取代旧的 NativeModules 系统,通过 JSI 实现同步调用,支持懒加载,大幅优化启动性能。

按需懒加载模块
同步方法调用
类型安全接口定义
渲染引擎

Fabric 渲染器深度拆解

新的渲染流水线如何实现并发渲染和更好的用户体验

Fabric 渲染流水线

React 描述
JSX 生成 React Element Tree
Shadow Tree
C++ 层计算布局 (Yoga)
Diff & Commit
对比新旧树,提交最小变更
Mount
在 UI 线程挂载原生视图
C

Shadow Tree C++ 化

旧架构中,Shadow Tree 在 Android (Java) 和 iOS (ObjC) 各自独立实现。Fabric 将其统一到 C++ 层,这意味着:

  • 1
    跨平台一致的布局计算逻辑
  • 2
    利用 C++ 多线程能力并发构建
  • 3
    减少平台特定 bug 和维护成本
  • 4
    Shadow Tree 与 JS 运行时同进程访问

并发渲染能力

Fabric 引入了类似 React 18 的并发特性,允许渲染工作在优先级调度下进行:

高优先级用户交互响应 (触摸、手势)
普通优先级常规 UI 更新和导航
低优先级屏幕外内容的预渲染
模块系统

TurboModules 与 Codegen

按需加载、同步调用、编译期类型安全

TurboModules

懒加载 · 同步 · 类型安全
特性旧 NativeModulesTurboModules
加载时机启动时全量加载按需懒加载 ✓
通信方式异步 BridgeJSI 同步调用 ✓
类型检查运行时编译期 (Codegen) ✓
方法签名手写原生代码自动生成代码 ✓
性能JSON 序列化直接内存访问 ✓
NativeTurboModule.ts (Spec)
// TurboModule Spec — Codegen 会据此生成原生接口
import type { TurboModule } from 'react-native';
import { TurboModuleRegistry } from 'react-native';

export interface Spec extends TurboModule {
  // 同步方法 — 直接返回值,无 Bridge 延迟
  getConstants(): {
    screenWidth: number;
    screenHeight: number;
    isTablet: boolean;
  };

  // 异步方法 — 返回 Promise
  fetchUserData(userId: string): Promise<{
    name: string;
    email: string;
    avatar: string;
  }>;

  // 带回调的方法
  addListener(eventName: string): void;
  removeListeners(count: number): void;
}

// 懒加载:仅在首次调用时初始化原生模块
export default TurboModuleRegistry.getEnforcing<Spec>(
  'NativeUserModule'
);

Codegen

编译期代码生成

Codegen 读取 TypeScript / Flow 的类型定义 (Spec),在编译期自动生成平台特定的胶水代码, 消除手写序列化逻辑和运行时类型错误。

生成产物
iOSRNUserModuleSpec.h / .mm
AndroidNativeUserModuleSpec.java
C++JSI 互操作接口
开发提示

启用新架构只需在 react-native.config.js 中设置newArchEnabled: true,并确保 Hermes 引擎已启用。

数据流

新架构完整数据流

从 React 组件到原生像素的全链路追踪

JS 线程
React 组件
useState / useReducer 触发更新
Reconciler
Virtual DOM Diff
JSI 调用
同步传递 Shadow Tree
TurboModule
调用原生功能
JSI (C++ Host Objects)
原生层 (C++ / Platform)
Shadow Tree
C++ 构建 & Yoga 布局
Diff 计算
对比新旧树差异
Commit
提交到 Mounting 层
原生视图
UIView / AndroidView
迁移路径

如何迁移到新架构

分步骤、零停机的渐进式迁移策略

Step 1

升级 React Native

确保使用 RN 0.76+,Hermes 引擎已启用

Step 2

迁移 NativeModules → TurboModules

为每个模块创建 TurboModule Spec,使用 Codegen 生成代码

Step 3

适配 Fabric 渲染器

更新自定义原生组件以兼容 Fabric 的 C++ 渲染管线

Step 4

全量启用新架构

在生产环境开启 newArchEnabled 标志,监控性能指标

迁移检查清单

Interop 模式

新架构提供了 Interop Layer,允许未迁移的旧模块在新架构下继续工作。 这意味着你可以逐步迁移,而不必一次性重写所有原生代码。但性能优化仅限于已迁移的模块。

总结

核心要点速览

记住这几点,你就掌握了新架构的精髓

JSI 替代 Bridge

C++ 层实现 JS ↔ Native 的同步直接调用,告别 JSON 序列化和异步等待

Fabric 并发渲染

C++ Shadow Tree + 优先级调度,实现流畅的并发 UI 更新

TurboModules 懒加载

原生模块按需初始化,启动时间缩短 40%,内存占用降低 30%

Codegen 类型安全

编译期从 TypeScript Spec 自动生成原生接口代码,消灭运行时类型错误