Perry 对比 React Native
React Native 让你写 JavaScript/TypeScript 来驱动 iOS 与 Android 上的原生 UI——UI 组件通过 JS 与原生之间的桥(或在新架构下的 JSI / Fabric 层,概念形态相同)映射到平台组件。Perry 走的是另一条路:TypeScript 被提前编译为原生机器码,原生 UI 是编译后二进制的一部分,而非运行时的桥。
什么是 React Native?
React Native 是 Meta 用 React 构建移动应用的框架。JavaScript 跑在嵌入式引擎里——默认 Hermes,或 JavaScriptCore——并通过桥(旧版)或 JSI/Fabric(新架构)与 iOS/Android 原生组件交互。该框架以移动优先(iOS 与 Android);Microsoft 维护着 Windows 与 macOS 的社区分支。React Native 已经支撑了 Meta、Microsoft、Shopify、Discord 等众多公司的应用。
什么是 Perry?
Perry 把 TypeScript 直接编译为原生机器码。它的 perry/ui 模块是一套 SwiftUI 风格的声明式 UI 系统,会在构建时编译为原生平台组件——二进制中没有 JS 运行时、没有桥、也没有 JSI。同一份 TypeScript 代码可以同时编译到 macOS、iOS、iPadOS、Android、Linux、Windows、watchOS、tvOS、Wear OS、WebAssembly 和 Web。
并排对比
| 特性 | Perry | React Native |
|---|---|---|
| 执行模型 | AOT 编译的原生机器码 | JS 引擎(Hermes/JSC)+ 原生桥(或 JSI/Fabric) |
| 应用中的 JS 引擎 | 无 | Hermes(默认)或 JavaScriptCore |
| UI | 原生组件——SwiftUI 风格的声明式 API | 通过 React + 桥 / Fabric 的原生组件 |
| 主要目标 | macOS、iOS、iPadOS、Android、Linux、Windows、watchOS、tvOS、WASM、Web | iOS、Android(Windows/macOS 通过社区分支) |
| 服务器 / CLI / 桌面二进制 | 支持(CLI 工具、服务器、桌面应用) | 不支持(移动 UI 框架) |
| JS 与原生之间的桥 | 无桥——原生代码就是程序本身 | 有(旧版桥或 JSI/Fabric) |
| 开发期热重载 | perry dev(watch 模式自动重编译) | Fast Refresh(非常快) |
| 成熟度 | Pre-1.0 | 稳定,在生产中被广泛部署 |
| 组件库 | perry/ui 核心组件 + perry-react React 兼容层 | 庞大——React Native + 社区包 |
Perry 胜出之处
- +交付的应用里没有 JS 引擎。Perry 编译出的二进制不携带 Hermes 或 JSC;TypeScript 就是可执行文件本身。
- +没有桥 / JSI 的成本。原生 UI 调用就是直接的编译后函数调用,而非 JS 与原生之间的编组。
- +更广的平台覆盖。一份 Perry 代码可同时编译到桌面(macOS/Linux/Windows)、移动(iOS/iPadOS/Android)、可穿戴(watchOS/Wear OS)、TV(tvOS)、WASM 和 Web。React Native 是移动优先。
- +用同一个编译器还能产出服务端与 CLI 二进制——Perry 不仅是一个 UI 框架,也是一个服务器运行时。
- +AOT 编译的计算性能——无需预热、无 JIT、也没有桥的往返。
- +perry-react 让你用 React/JSX 写出会被编译为原生组件的代码,因此可以在不让二进制带 JS 引擎的前提下,沿用 React 心智模型。
React Native 胜出之处
- +成熟、经过实战检验的生态,社区支持、库与工具链都极其丰富。
- +开发期的 Fast Refresh 是同类最佳——代码改动会在毫秒内反映出来,无需重建。
- +庞大的人才池。招 React Native 开发者很容易;Perry 还很新。
- +成熟的 CI/CD、App Store / Play Store 发布流水线,以及 codepush 风格的 OTA 更新。
- +JSI/Fabric 与新架构在保留 React 编程模型的同时,已经显著弥合了与原生之间的历史性能差距。
- +来自 Meta 与主要采用方(Microsoft、Shopify、Amazon)的直接支持持续推动该框架向前演进。
何时选择 Perry
如果你希望用一份 TypeScript 代码覆盖移动、桌面、手表、TV、WASM 与 Web;希望交付的应用里没有 JS 运行时;希望使用没有桥的原生 UI;或者你已经投入到 TypeScript 并希望走原生编译而不是 JS 引擎路线,就选 Perry。
何时选择 React Native
如果你正在构建移动应用,并希望使用最成熟的跨平台原生 UI 框架;你已有现成的 React 团队;你依赖 React Native 的库生态;或者你需要当下行业标准的移动跨平台技术栈,就选 React Native。
结论
React Native 是一个移动优先、带 JS 运行时和(如今已显著改进的)桥的框架。Perry 是一个从 TypeScript 生成原生二进制的编译器,原生 UI 是编译输出的一部分。如果你想要在移动端使用 React 并拥有最深厚的生态,今天的答案是 React Native;如果你想要一份 TypeScript 代码同时编译到移动 + 桌面 + 手表 + TV 且应用中不带 JS 运行时,那答案是 Perry。