此页面将 React Native 的旧架构(基于 Bridge)与其新架构(无 Bridge)进行了比较。它概述了两种架构的核心组件、它们之间的主要区别,并描述了用于控制迁移的特性标志系统。
有关使用新架构设置项目的更多信息,请参阅此 wiki 中的其他指南。
React Native 的架构演进是由解决性能限制、改善开发者体验和实现与原生平台的更紧密集成而驱动的。从旧(Bridge)架构到新(Bridgeless)架构的过渡,代表了 React Native 应用程序在 JavaScript 和原生代码之间通信方式的根本性转变。
来源
React Native 的旧架构使用 Bridge 来实现 JavaScript 和原生代码之间的通信。自创建以来,这种设计一直是 React Native 的基础。
在旧架构中,ReactInstanceManager 是管理 React Native 运行时环境的入口点。
CatalystInstanceJavaScript 和原生代码之间的桥梁
提供对原生模块和原生环境访问的上下文
来源
旧架构存在一些限制,这促使了新架构的开发
新架构,通常称为“Bridgeless”,通过引入多项重大改进来解决旧架构的限制。
ReactHost 是新架构的主要入口点,取代了 ReactInstanceManager。
JSI 是一个核心组件,支持 JavaScript 和原生代码之间的直接方法调用。
TurboModules 是新架构下处理原生模块的方式。
Fabric Renderer 取代了旧的 UIManager 来渲染 React 组件。
BridgelessReactContext 提供与 BridgeReactContext 类似的功能,但专为新架构设计。
来源
从旧架构迁移到新架构的过渡由一套全面的特性标志系统控制。这些标志支持增量式采用新架构组件。
控制架构的最重要特性标志是:
| 标志 | 默认 | 目的 |
|---|---|---|
enableBridgelessArchitecture | false | 启用新架构的主开关 |
enableFabricRenderer | false | 启用 Fabric 渲染系统 |
useTurboModules | false | 为原生模块启用 TurboModules |
useTurboModuleInterop | false | 允许旧模块使用 TurboModule 系统 |
useFabricInterop | true | 允许 Fabric 组件和非 Fabric 组件混合使用 |
当启用 enableBridgelessArchitecture 时,它会自动启用 enableFabricRenderer 和 useTurboModules。
来源
特性标志通过 ReactNativeFeatureFlags API 访问。
在原生代码中
来源
| 旧架构 | 新架构 |
|---|---|
ReactInstanceManager | ReactHost |
CatalystInstance | ReactInstance |
BridgeReactContext | BridgelessReactContext |
ReactRootView | ReactSurface |
React Native 与 Android Activities 的集成已适应以支持这两种架构。
ReactDelegate 类根据架构处理条件性路由到 ReactInstanceManager 或 ReactHost。
来源
在旧架构中,组件通过 UIManager 模块渲染,所有属性更新都进行 JSON 序列化。在新架构中,Fabric Renderer 维护了一个 C++ shadow tree,可以通过 JSI 从 JavaScript 直接访问。
来源
React Native 团队开发了多种机制来促进从旧架构到新架构的迁移。
Fabric Interop Layer(useFabricInterop 标志)允许旧架构的视图组件在 Fabric 应用程序中工作。
TurboModule Interop(useTurboModuleInterop 标志)允许旧的原生模块与 TurboModule 系统一起工作。
来源
React Native 中从旧架构到新架构的过渡代表了对 JavaScript 和原生代码如何交互方式的根本性重新构想。主要区别可以总结为:
| 方面 | 旧架构 | 新架构 |
|---|---|---|
| JS 到 Native 通信 | 带 JSON 序列化的 Bridge | 直接 JSI 通信 |
| 入口点 | ReactInstanceManager | ReactHost |
| 上下文 | BridgeReactContext | BridgelessReactContext |
| 原生模块 | 旧的原生模块 | TurboModules |
| 渲染 | UIManager | Fabric Renderer |
| 类型安全 | 有限的运行时检查 | 通过 CodeGen 增强 |
| 通信类型 | 主要异步 | 支持同步调用 |
| 性能 | 受限于序列化 | 通过直接内存访问改进 |
| 视图管理 | ReactRootView | ReactSurface |
特性标志系统支持渐进式采用,互操作层确保了现有应用程序的平滑迁移路径。
来源
刷新此 Wiki
最后索引时间2025年4月17日(5ed459)