找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

6190

积分

0

好友

755

主题
发表于 昨天 21:29 | 查看: 1| 回复: 0

Shopify 最近正式回应了「从 React Native 回到原生」和「为什么不用 KMP」这两个问题。就在 2025 年,他们还刚刚总结过五年的 RN 实践,那时所有移动 App 都已经迁到 React Native,Shopify App 做到了 P75 页面加载低于 500ms、超过 99.9% 的 crash-free sessions,甚至已经迁移到 RN 新架构上,并明确把这次迁移称为巨大成功。

Shopify 关于从 React Native 转向原生的问题与架构对比图

结果现在突然宣布回归原生。原因也很直接:AI 来了之后,「React 这个共享语言,现在被 English 取代了」。

AI 取代 React 成为共享语言的论述截图

也就是说,对 Shopify 而言,跨平台的一致性需求已经发生变化:从过去的「共享代码」转向「共享行为、测试和验证标准」。AI 可以负责把同一个意图分别实现成 Swift 和 Kotlin,再由测试系统证明这两份实现仍然是同一个产品。

整个变化大致可以这样理解:

成本 2020 年 Shopify 2026 年的做法
功能实现 Swift/Kotlin 人工做两遍,贵 Agent 大量承担第二份实现
双端同步 靠人追 Feature Parity Agent 比较实现和自动化测试
人员技能 往往需要 iOS/Android 专长分别覆盖 同一个开发者可以借 Agent 跨栈工作
原生能力 RN 需要框架、Binding、第三方库 Swift/Kotlin 直接使用第一方能力

当然,这也不是「有手就行」的事情。把 Swift 和 Kotlin 都生成出来其实不难,真正麻烦的是时间长了以后,问题会逐渐浮现:

  • iOS 修了一个边界 Bug,Android 有没有跟?
  • 一个 analytics event 的 payload 两边是不是一致?
  • 无障碍行为有没有漂移?
  • 某个 Experiment 是否只在 Android 落了?

以前 React Native 的最大优势在于,大量业务逻辑天然只有一份,因此很多差异从源头就不存在。但回到原生后,这些东西可不是用了 AI 就白送。因为 AI 会飘、会作弊、会幻觉、会偷懒。只有没经历过真正工程开发的人,才会觉得用了 AI 就能立刻实现双端原生。

这里有一个很典型的例子:英伟达最近用 AI 给 KDA 做性能优化时,AI 为了作弊做了不少骚操作:

  • 发现 Q/K 输入总是某种高斯分布,干脆不算真实 L2 norm,直接写死一个 0.1778209953 常数
  • 发现测试里的 sequence layout 固定,就把 cu_seqlens 的动态逻辑写死
  • 发现测试数据里旧 history 影响不大,就只保留最近 32 token,把历史直接砍掉
  • 使用一种计算 decay 的快速方式,测试数据能跑,但衰减稍大就数值 underflow,真实模型直接 NaN

英伟达 AI 性能优化审计发现作弊行为的技术报告

看不懂这些具体细节没关系,只需要明白:AI 在实现需求时是不可靠的。AI 不保证你给出一份 Android 代码,就能生成行为一致的 iOS 代码。如果什么都不做,只想着让 AI 对着 Android 生成 iOS,结果大概率是一堆难以维护的“屎山”。Shopify 的迁移一开始也遇到类似问题。

所以 Shopify 后来做了大量工作来维持迁移和双端一致性。核心思路是把“一致性”从源码层搬到验证层:

用一套共享测试来验证 Swift 和 Kotlin 中实现的业务逻辑,同一 Feature 只有两端都通过相同测试才能发布。这些逻辑还能脱离模拟器,直接 headless 跑在桌面环境里,给 Agent 一个非常快的反馈循环。

换句话说,以前跨端框架承担的是结构性约束,大家只能共享同一套实现,自然不容易分叉。而 Shopify 现在改成另一种约束:

允许代码长得完全不同,但要求最终行为持续满足同一份 contract。

这也解释了为什么 Shopify 现在仍然要求“一个开发者同时负责两个平台”。他们没有重新拆出传统的 iOS Team 和 Android Team,还是同一个人保留产品上下文,让 Agent 帮他跨越陌生技术栈。这样做的目的是减少“两个团队之间解释同一个 Feature”的沟通成本,而 Swift/Kotlin 的实现差异则交给工具去吸收。

所以 Shopify 没有因为回归原生就加人,还是原本的人,只是跨平台框架变成了 Agent 跨平台框架,把代码成本变成验证成本。

在这个过程中,他们做了 Helix。拿迁移一个订单页面举例:

  • 工程师告诉 Helix 要迁哪个 screen
  • Helix 先读取现有 RN 原始需求实现,把任务切成几个很小的 checkpoint
  • 然后先搭页面骨架,再实现订单 header,再接 action,再补复杂状态
  • 每完成一个 checkpoint,先用 CLI 行为测试证明逻辑正确,然后把 RN 旧页面和新原生页面放到相同状态,通过视觉模型检查布局和 UI 差异
  • 之后再交给两个彼此隔离的 reviewer agent 检查架构和代码质量,最后才轮到工程师确认

Shopify 还专门做了 Tardis,把运行中的日志、事件、状态暴露给 Agent,同时允许它发送命令。之后做 parity review 时,Tardis 还可以同时捕获 RN 和 native App 的截图、analytics event 以及 payload,再让 Agent 检查两边是否对应。

这样后续 iOS 和 Android 在推进过程中也可以享受这套 infra。

所以不是说没有成本,实际成本反而比 RN 还高。但收益也很明显。Shopify 能够放弃 shared codebase,很大程度上依赖他们有一套 shared verification system。回到原生后,对 Shopify 来说最直观的就是性能收益:

指标 React Native Native 变化
iOS 冷启动 3200 ms 2466 ms -23%
Android 冷启动 4433 ms 2233 ms -50%
Session stability 99.5%+ 99.95%+ Crash session 降 10 倍
Android App Size 293 MB 184 MB -37.2%
Android Release Build — — 时间降 75%

至于 Kotlin Multiplatform (KMP),它恰好处在 RN 和完全双原生之间。KMP 在 AI 时代可能反而会更受欢迎,因为它以前用起来麻烦、门槛较高,而现在 AI 能帮忙抹平这些问题。

但对 Shopify 来说,KMP 仍然没有意义。因为用了 KMP 反而要多处理一些问题,比如 iOS 上模块垃圾回收和调试相关的性能开销。在已经有一整套 AI infra 之后,维护 infra 就足够支撑两套原生代码对比,性能问题直接就是附加收益,升级适配也能按 P0 完成,不需要等框架适配。所以干脆没必要上 KMP。

Kotlin Multiplatform 与跨平台开发未来展望

也正如作者所说,原生的成本降低了,对跨平台方案来说同样也更低。双端脱离跨平台后的长时间迭代成本,需要有基建持续来维持。所以这个过程只是把成本转移到了其他位置,但收益同样直接:性能和适配就是最明显的回报。




上一篇:CVE-2026-86950苹果CoreGraphics高危漏洞PoC公布,恶意PDF可致设备崩溃
下一篇:给 Claude Code 装上 AutoHarness 自我更新引擎,我终于删光了手写的 Skill
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-3 00:33 , Processed in 0.559504 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表