阅读,与值得关注的内容Readance

iPhone Duo 点燃跨端大战!React Native 和 "新 Flutter" 开撕!

大家好,我是 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 时代,FabricJSI、原生组件体系越来越成熟,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 / RecyclerView
  • Text → UILabel / Native Text
  • TextField → 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 / RecyclerViewUILabelUITextField,以及 iOS 的 Core Animation

那 React Native 真被吊打了吗?

还真没那么简单。

首先,现在的 React Native 早就已经不是当年那个 Bridge 满天飞的 RN 了

随着 JSIFabricNew 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 最后能不能真的成为 FlutterReact Native 之外的第三种选择,我觉得可以再给它一点时间。

毕竟跨端这个赛道,多一个认真折腾技术的玩家,对开发者来说总归是一件好事。

前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →