Open Source Daily Issue 1075: Single-Source API Management Center: "apihub"

Open Source Daily Issue 1075: Single-Source API Management Center: "apihub"

💡 原文英文,约2400词,阅读约需9分钟。
📝

内容提要

《开源日报》推荐了 freeapi API 管理中心及一篇介绍 React Native 新架构的文章。新架构以 JSI 取代 Bridge,实现 JS 与原生直接调用、免去 JSON 序列化并支持多引擎;Fabric 新渲染系统使 JS 与 UI 线程同步,提升列表与手势性能,并通过共享 Shadow Tree 节省内存;Turbo Modules 按需加载模块以缩短启动时间;CodeGen 在构建时生成类型接口。

🔎

延伸解读

新架构的核心:从 Bridge 到 JSI

文章指出,旧架构依赖 Bridge 在 JS 与原生线程间传递序列化 JSON,只能异步通信,且 JS 无法直接调用原生方法。新架构用 C++ 编写的 JSI 取代 Bridge,使 JS 能持有原生模块引用并直接调用,省去序列化开销,同时解除对 JavaScriptCore 的绑定,允许换用 Chakra、V8、Hermes 等引擎。

Fabric 与 Turbo Modules 带来的实际变化

Fabric 替换 UI Manager,让 JS 与 UI 线程同步,滚动、手势等用户交互可优先同步执行,其他任务仍异步;共享不可变 Shadow Tree 还减少内存占用。Turbo Modules 则让原生模块按需加载,而非启动时全部初始化,从而缩短启动时间。这些改动直接针对列表卡顿和启动慢等常见体验问题。

CodeGen 解决动态与静态类型的衔接

由于 JavaScript 是动态类型,而 JSI 基于静态类型的 C++,两者通信需要额外保障。文章介绍 CodeGen 作为静态类型检查器,以带类型的 JavaScript 为源,在构建时定义 Turbo Modules 和 Fabric 使用的接口并生成更多原生代码,而不是留到运行时处理,有助于减少运行期开销和类型不匹配风险。

❓

Q&A

React Native 新架构中的 JSI 是什么?它解决了旧架构的哪些问题?

JSI(JavaScript Interface)是一个轻量级、用 C++ 编写的通用层,允许 JavaScript 直接调用原生方法。它取代了旧的 Bridge,消除了 JSON 序列化的需要,实现了 JS 与原生线程之间的完全互操作,并支持切换其他 JavaScript 引擎(如 Chakra、V8、Hermes)。

Fabric 渲染系统相比旧渲染系统有哪些改进?

Fabric 取代了 UI Manager,实现了 JS 和 UI 线程的同步,提升了列表、导航、手势等交互性能;它通过共享不可变的 Shadow Tree 减少内存消耗,并允许用户交互任务同步执行,而其他任务异步执行。

Turbo Modules 如何提升 React Native 应用的启动速度?

Turbo Modules 改进了旧的 Native Modules,使 JavaScript 能够在需要时按需加载模块,而不是在应用启动时初始化所有模块,从而显著减少启动时间。

CodeGen 在 React Native 新架构中起什么作用?

CodeGen 是一个静态类型检查器,确保动态类型的 JavaScript 和静态类型的 C++ 之间顺畅通信。它在构建时定义 Turbo Modules 和 Fabric 使用的接口元素,并生成更多原生代码,而不是在运行时生成。

旧架构中 React Native 的 Bridge 是如何工作的?有什么局限性?

旧架构中,Bridge 用 Java/C++ 编写,通过自定义消息传递协议在 JS 线程和原生线程之间通信。所有数据必须序列化为 JSON 并异步传递,导致传输慢、数据复制以及无法同步调用原生方法。

React Native 新架构中 JavaScript 引擎可以替换吗?为什么?

可以。因为 JSI 与引擎解耦,新架构不再局限于 JavaScriptCore,允许使用其他 JavaScript 引擎,如 Chakra、V8、Hermes 等。

🏷️

标签

➡️

继续阅读