跳到内容
CrossFly 是 100% 开源在 GitHub 关注我们
CrossFlyCrossFly
开始使用
对比框架

CrossFly vs React Native

CrossFly 和 React Native 都承诺一份代码覆盖多个平台,但引擎截然相反。CrossFly 编写 Java,直接在 GPU 上绘制自己的 UI。React Native 编写 JavaScript 来编排每个平台的原生控件——很强大,但一切仍要汇聚到一条 JS 线程和一堆社区原生模块之中。

一句话总结—— React Native 在 JavaScript/React 团队以及拥有庞大生态系统的移动优先产品上大放异彩。CrossFly 则赢在 JVM 团队:想要一致的 GPU 绘制 UI、一等的桌面支持,并摆脱单线程 JS 或原生模块的升级成本。

无 JS 线程
渲染路径上没有——没有单线程天花板
一等公民
桌面来自同一渲染器,而非一个旁支仓库
Java
与你后端相同的语言,无需切换到 JS/TS
CrossFly · Java

CrossFly 是一个开源框架(Apache 2.0),你用纯 Java 编写 UI 和逻辑,它通过 LibGDX/OpenGL 在 GPU 上渲染,并编译为桌面端(Windows、macOS 和 Linux)、Android 和 iOS 的原生二进制文件,以及可在 Chrome、Firefox、Safari 等任何现代浏览器中运行的 WebGL 构建。搭配 CrossFly Sync 即可实现离线优先的数据。

React Native · JavaScript / TypeScript

React Native 是 Meta 的开源(MIT)框架,你编写 JavaScript/TypeScript,它使用每个平台的原生控件来渲染。其新架构(JSI/Fabric/TurboModules)取代了旧的桥。它面向 Android 和 iOS;桌面由社区维护、在主干之外。

真正重要的差异

新架构解决了真实的问题。这里说的是它没解决的——以及 CrossFly 在结构上更简单的地方。

01 · 差异

UI 仍然骑在一条 JavaScript 线程上

痛点: React Native

新架构(JSI/Fabric)移除了旧的序列化桥——这是实打实的进步。它没有移除的是:你的 JS 逻辑仍运行在单一线程上。繁重计算、大列表或复杂动画仍可能饿死 UI 线程、丢帧;生态系统自己给出的答案 FlashList,正是因为列表在中端 Android 上卡顿才存在的。

而 CrossFly

CrossFly 的渲染路径里根本没有 JS 线程。UI 由 Java 在 GPU 上绘制,所以“JS 线程忙所以屏幕卡顿”这一整类问题根本不存在。

02 · 差异

原生模块是一张兼容性矩阵

痛点: React Native

任何核心没有覆盖的东西——相机、地图、蓝牙、支付——都是一个社区原生模块。让几十个模块在 Gradle、CocoaPods 和每个 React Native 版本之间保持相互兼容,用社区自己的话说,接近一份全职工作;一次版本升级很少只是“把数字改大而已”。

而 CrossFly

CrossFly 拥有自己的渲染栈,并调用 JVM 成熟的库。没有一群按平台划分的原生模块要去调和,也不会每次升版就遇上 CocoaPods/Gradle 的原生崩溃。

03 · 差异

升级早已声名在外

痛点: React Native

React Native 以升级痛苦而闻名:破坏性变更横跨 JS 和原生,AppDelegate/Gradle 的调整可能让你的应用白屏,而且官方专门有一个 Upgrade Helper,因为手动比对版本就是这么繁琐。落后一年,你就要面对手动迁移——而新架构如今已是强制的,未迁移的模块会逼着你排期。

而 CrossFly

一门语言、一套工具链、很小的依赖面,加上 JVM 的向后兼容文化,让 CrossFly 的升级枯燥得多——而这恰恰是你想从一次升级中得到的。

04 · 差异

桌面是外挂件,不是目标

痛点: React Native

React Native 的桌面存在于独立的、由社区/Microsoft 维护的仓库(react-native-windows/macOS)中,按自己的节奏推进,落后于核心和新架构。它可用,但相比 iOS 和 Android 是二等公民。

而 CrossFly

桌面是 CrossFly 的一等目标,来自与移动相同的 GPU 渲染器——一份代码、一个负责人,在 Windows、macOS、Linux、Android、iOS 和浏览器中表现一致。

CrossFly 领先之处

在 GPU 上绘制自己的 UI——没有单线程 JS 来卡住滚动、动画或繁重工作。
运行在 JVM 上的 Java——与你后端相同的语言和工具,没有 JS/TS 的上下文切换。
桌面端(Windows、macOS 和 Linux)、Android、iOS 和网页(Chrome、Firefox、Safari 等浏览器)都来自同一渲染器、同一负责人,全部是一等公民。
在各次 SDK 升级中需要保持相互兼容的原生模块要少得多。
CrossFly Sync 开箱即给你双向的离线优先数据。

React Native 真正强大之处

全球最大的语言生态系统——JavaScript/React 人才和 npm 包无处不在。
渲染真正的原生控件,契合每个操作系统的外观和无障碍。
Expo + EAS 提供近乎零配置的搭建、云构建和空中更新。
与 Web 上的 React 共享技能和部分代码;出色的 Fast Refresh 开发体验。

CrossFly 对比 React Native 一览

维度CrossFlyReact Native
语言JavaJavaScript / TypeScript
渲染通过 LibGDX/OpenGL 在 GPU 上原生平台控件
渲染路径线程GPU,无 JS 线程单条 JS 线程编排 UI
原生模块很少(JVM 库)众多社区模块要去调和
Java/后端复用直接(它就是 Java)通过原生模块/JS
平台桌面端(Windows、macOS、Linux)、Android、iOS、网页(任意浏览器)——都是一等公民Android、iOS;桌面在主干之外
离线优先CrossFly Sync(双向)第三方包
升级依赖面小,JVM 节奏出了名地繁琐(Upgrade Helper)
治理多厂商 OpenJDKMeta 主导 + 社区
许可开源(Apache 2.0,Core)开源(MIT)

在以下情况选择 CrossFly

你的团队在 Java/JVM 上,且想跳过 JS/TS 工具链。
你想要一致的 GPU 绘制 UI 和一等的桌面支持,而非一个旁支仓库。
你需要可预测的升级和离线优先的企业数据。

在以下情况选择 React Native

你的团队已经在写 JavaScript/React,并看重 npm 生态系统。
你想要真正的原生控件和一个移动优先的产品。
Expo 的工作流、空中更新和 Web 代码共享对你很重要。
一句话结论

对于在软件界最大的生态系统上构建移动产品的 JavaScript 优先团队,React Native 是绝佳之选。但如果你是一家 JVM 团队,CrossFly 用你后端早已在说的那门语言,交给你一致的 GPU 绘制 UI、一等的桌面支持,以及摆脱单线程 JS 天花板和原生模块升级跑步机的自由。

CrossFly 对比 React Native——常见问题

一份 Java 代码。没有桥。覆盖每一屏。

跳过 JS 线程和原生模块矩阵。编写 Java,在 GPU 上绘制,交付到桌面端(Windows、macOS 和 Linux)、Android、iOS 和网页(Chrome、Firefox、Safari 等浏览器)。

开始构建查看所有对比