【翻译】全新 React Native 架构解析:第三部分

32 阅读3分钟

原文链接:nearform.com/digital-com…

作者:Lorenzo Sciandra

第三部分:Fabric与TurboModules

React Native重构计划始于2018年,这是Facebook为解决该跨平台移动解决方案长期存在的问题所进行的重大努力。

本系列将概述构成React Native新架构的核心要素。为使说明尽可能通俗易懂,我们将避免展示代码,同时分享我们对这项新实现的兴奋之情。

本文将深入探讨重构的核心部分——每位 React Native 开发者都耳熟能详的 Fabric 与 TurboModules。

正如先前探讨的,新版 React 引入了队列机制,而 JSI 使 JavaScript 代码能够感知"另一侧"的原生代码

为便于理解,我们将对旧架构的桥梁模块进行"过度简化"说明: 这组元素主要负责两种不同行为:通过阴影树定义用户界面的外观与交互方式,以及通过原生模块管理原生端。如前所述,这些通信通过异步JSON消息实现,消息经批量处理后通过单一通信通道往返传输。正如您所料,该通道可能出现拥塞,导致用户体验不佳。

Facebook团队决定将这个庞大的桥梁拆分为两个独立组件:Fabric(即UI管理器的重构方案)和TurboModules(作为与原生端交互的"新一代"实现方案)。

Fabric旨在现代化React Native的渲染层。在当前实现中,所有UI操作都通过一系列跨桥接"步骤"处理(React -> Native -> Shadow Tree -> 原生UI)。而新实现允许UI管理器直接用C++创建Shadow Tree,通过减少跨域"跳转"次数,极大提升了处理速度。本质上,这极大提升了用户界面的响应能力。

此外,通过使用JSI接口,Fabric将UI操作以函数形式暴露给JavaScript:全新的Shadow Tree(决定实际屏幕显示内容)在两个运行环境间共享,实现双向直接交互。

不仅如此,这种来自JavaScript端的直接控制还实现了对新React(首篇文章提及)中UI操作优先级队列的支持,从而能在性能受益时主动选择同步执行。这一基础架构将有效改善列表、导航和手势处理等常见痛点。

在当前实现中,由于首篇文章提及的领域间"隔离"问题,JavaScript代码使用的原生模块(如蓝牙模块)必须在应用启动时初始化——即便实际未使用。全新的TurboModules方案允许JavaScript代码仅在真正需要时加载模块,并直接持有模块引用,这意味着无需再通过旧版桥接器批量传输JSON消息进行通信。对于大量使用原生模块的应用程序,这将显著缩短启动时间,同时实现其他文章中提及的直接通信机制。

如前所述,第三模块的所有变更均基于前文探讨的 JavaScript 接口。若要概括 Facebook 新团队架构至此阶段的整体框架,大致如下: 至此,我们对重构架构的探索已进入第三部分。下周我们将发布本系列的最终篇章。在此期间,请记得将本文分享给开发者同仁,或通过推特(私信通道已开启)提出后续问题。

我们期待这些强大的变革能激发您的热情——它们将彻底改变您的代码库,却无需任何重写。

快上这趟炒作列车吧!

系列其他篇章:

第一部分 | 第二部分 | 第四部分