大家好,我是 xy。
苹果刚刚发布首款折叠屏手机 iPhone Duo,手机还没正式开卖,跨端开发圈已经先热闹起来了。
Expo、React Native、DartNative 几拨人直接在 X 上杠上了。
事情的起因也很简单:
iPhone Duo 这种全新的设备形态,跨端框架到底要多久才能跟上?
iPhone Duo,给跨端框架出了一道新题
这次 iPhone Duo 可不只是把 iPhone 屏幕从中间折一下。
它拥有 5.4 英寸外屏 + 7.6 英寸内屏,打开和关闭时,App 需要在不同尺寸之间动态切换。
同时还有双屏、折叠姿态、Split View、非对称 Safe Area、竖向导航栏等一系列新的交互场景。
Apple 官方甚至专门强调:开发者需要重新检查 动态布局、Size Classes、导航栏以及不同折叠状态下的界面表现。
对于原生 SwiftUI / UIKit 来说,苹果自然会第一时间提供支持。
那 React Native 和 Flutter 怎么办?
这才是大家真正关心的问题。
Expo:已经在跟了
发布会刚结束没多久,Expo 官方就直接晒出了 iPhone Duo 相关进展。
速度快得离谱。
这其实也是近几年 Expo 一直在强化的优势:Apple 每次推出新的系统 UI、新组件、新能力,Expo 都希望尽可能快地把它带进 React Native。
尤其现在的 React Native 已经进入 New Architecture 时代,Fabric、JSI、原生组件体系越来越成熟,Expo 自己也在不断往更深的系统能力里钻。
所以 iPhone Duo 一发布,Expo 很快跟进,并不算特别意外。
真正有意思的是——隔壁 DartNative 看不下去了。
DartNative:这有什么好炫耀的?
DartNative 作者 Ioseph Magno 很快发帖回应。
大概意思非常直接:
Expo 的人一直喜欢拿“快速支持苹果原生能力”说事,但现在 DartNative 一样可以快速支持 iPhone Duo。
包括:
原生导航栏 原生组件 系统动画 最新的 iOS 原生能力
最后甚至直接丢下一句:DN > RN。
火药味瞬间就起来了。
随后 React Native 社区开发者也加入讨论,这件事很快从“谁先支持 iPhone Duo”,变成了另一场老生常谈的战争:
跨端框架到底谁更接近原生?
DartNative 为什么敢直接叫板 React Native?
这里就要说说 DartNative 这个最近刚冒出来的新东西了。
它很有意思。
你依然写 Dart,API 设计甚至大量继承了 Flutter 的使用习惯,底层链路大概可以理解成:
Dart → DartNative → FFI / JNI → UIKit / Android View
比如一个列表,在 Flutter 里最终由自己的渲染体系绘制。
到了 DartNative:
ListView→UITableView / RecyclerViewText→UILabel / Native TextTextField→UITextField
也就是说,它直接使用平台自己的 UI 控件。
DartNative 官方甚至把口号写得非常直白:
Real native apps, written in Dart.
同时强调自己没有 Impeller、没有 Skia、没有 JavaScript Runtime,通过 Dart AOT 编译后直接驱动原生 View。
这就非常有意思了。
它刚好卡在 Flutter 和 React Native 中间
如果粗暴一点理解,三者的路线大概是这样:
Flutter:
Dart → Flutter → Impeller / Skia → UI
React Native:
JavaScript → React Native → Fabric / Native Components → UIKit / Android View
DartNative:
Dart AOT → FFI / JNI → UIKit / Android View
所以 DartNative 瞄准的位置很明确:
保留 Flutter 开发者熟悉的 Dart 和 Widget 开发体验,同时直接使用原生 UI。
这也是为什么 DartNative 一发布,就疯狂强调键盘动画、滚动、文字渲染、原生输入框、Liquid Glass 这些细节。
因为这些恰恰是“像不像原生”最容易露馅的地方。
DartNative 官方目前甚至宣称可以使用真正的 UITableView / RecyclerView、UILabel、UITextField,以及 iOS 的 Core Animation。
那 React Native 真被吊打了吗?
还真没那么简单。
首先,现在的 React Native 早就已经不是当年那个 Bridge 满天飞的 RN 了。
随着 JSI、Fabric、New Architecture 不断成熟,JS 和 Native 之间的调用方式已经发生了很大变化。
再加上 Expo 这些年疯狂补基础设施、原生模块和 Router,React Native 最大的优势依然非常恐怖:生态。
DartNative 官方目前公布的是 34 个第一方插件,框架也刚刚开始真正进入开发者视野。
React Native 背后却已经是一个发展多年的庞大生态。
支付、地图、推送、相机、监控、登录、动画、第三方 SDK……
真正做商业项目时,这些东西可能比 Benchmark 多出来的几帧更加重要。
另外,DartNative 官网那些 120fps、Zero stutter、DN > RN 等性能描述,目前主要还是来自项目官方。
在更多第三方 Benchmark 和真实大型项目出现之前,我觉得先别急着封神。
写在最后
技术圈这种“谁吊打谁”的讨论一直都很有流量,但真正到了项目里,其实很难用一句 A > B 下结论。
Flutter 有自己的渲染体系,跨平台一致性强,生态也已经非常成熟。
React Native / Expo 背靠庞大的 JavaScript 和 React 生态,原生能力、社区规模以及商业项目积累都是它的优势。
DartNative 选择了另外一条路线,用 Dart 直接连接 UIKit / Android View,思路足够新,也确实给跨端开发提供了新的可能。
三种方案走的是不同路线,解决的问题也不完全一样。
对开发者来说,真正重要的还是自己的 项目场景、团队技术栈、生态依赖、性能要求以及长期维护成本。
技术可以讨论,架构可以争论,Benchmark 也可以拿出来硬碰硬,但没必要发展成技术鄙视链。
能解决问题、能创造价值的技术,都值得尊重。
至于 DartNative 最后能不能真的成为 Flutter、React Native 之外的第三种选择,我觉得可以再给它一点时间。
毕竟跨端这个赛道,多一个认真折腾技术的玩家,对开发者来说总归是一件好事。