拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Shopify弃React Native回原生:跨端六年轮回与移动选型启示

看到 Shopify 宣布放弃 React Native、回归原生开发的消息时我第一反应不是意外而是感叹这个案例终于被摆上台面了。从 2019 年高调押注 React Native到 2024 年宣布把 iOS 和 Android 客户端逐步迁回原生六年时间足够让一轮跨端浪潮经历完整的兴起、狂热和祛魅。对正在纠结要不要上 RN、要不要下车的团队来说Shopify 这次倒反天罡的转身比十篇技术评测都有说服力。这篇文章不打算替谁站队只想把 Shopify 在跨端路线上的前因后果、技术根因以及这件事对普通开发者的真实映射拆开聊透。无论你是 App 负责人、移动端工程师还是正在为下一个项目做技术选型的产品经理都值得认真读一遍这个案例——因为它的教训不是 Shopify 独占的而是整个移动开发行业正在面对的共性难题。1. 从押注到转身Shopify 跨端路线的六年完整复盘1.1 2019 年为什么一家电商巨头会选择 React Native2019 年正好是跨端框架最热闹的当口。React Native 靠着来自前端的海量开发者基数、热更新能力和 JS 生态从一个实验项目长成了大厂标配。Shopify 宣布拥抱 RN 的逻辑放在当年很好理解它需要的是让业务逻辑在 iOS 和 Android 之间最大程度复用同时降低 Android 端长期落后的维护成本。官方当时的说法是 best of both worlds——既保留 Web 研发的敏捷又被原生端的能力兜底。这里要补充一个背景Shopify 是电商 SaaS 平台既有消费者端购物 App也有商家端经营工具还有大量嵌入式组件技术栈非常杂。当时团队只有一小部分人专注 iOS/Android 原生开发更多资源压在后端和 Web 上。对于这种Web 是大本营、移动端是分支的团队RN 天然是最容易落地的跨端方案前端同学可以直接切入移动端业务不需要从零重建一个原生团队。再说招聘市场。那几年 React Native 工程师的供给比原生双端都充足。对 Shopify 这种体量要在加拿大和美国同时组两支高质量原生团队难度和成本都极高。跨端复用一个团队尤其诱人。这套决策放在当时的行业环境下几乎找不出什么明显破绽。1.2 六年扩张代码库膨胀与双端体验的分叉RN 不是用完就扔的技术它会长在公司核心资产里。六年里Shopify 的移动端业务持续扩张从基础购物流程延伸到 AR 试穿、直播带货、商家经营工具等。功能越叠越多代码量膨胀问题就开始集中暴露业务代码写一份是好事但性能优化工作几乎要做两份。每次 iOS 上丝滑、Android 上掉帧或者反过来团队都要在原生层和 JS 层之间来回定位。依赖长尾。RN 生态里的第三方库质量参差不齐有些库半年不更新遇到系统升级就得 fork 下来自己修。新架构迁移压力。Meta 这几年一直在推 Fabric、TurboModule目的是解决老桥的性能瓶颈但迁移本身是巨大工程。基于旧架构的业务代码和第三方库全都得重新对齐新架构 API。这些都不是 Shopify 独有的问题而是所有用 RN 承载大型业务的公司迟早会撞上的墙。只是对 Shopify 这种产品复杂度远超一般 App 的公司来说问题来得更集中、也更猛。1.3 官宣回归原生表面是方向调整底层是优先级变了Shopify 官方公告里写的理由概括起来就是一句话用户体验最终取决于原生性能。其实这背后是不断上升的用户体感阈值。购物类 App 对流畅度极度敏感用户在结账流程里每多等一帧都可能流失一单。当团队把大量精力消耗在跨端桥接、兼容性修补上而不是放在真正的体验设计上产品竞争力自然会下降。公告还提到回归原生后推出新功能的速度会更快。这个判断很关键在跨端方案里新系统能力比如灵动岛、新的手势系统得到 RN 社区或第三方库支持通常有时滞甚至完全缺席。而 Shopify 这种体量的公司功能上新节奏是被市场竞争逼出来的等不起。所以我一直认为这次回归不是对 RN 的全盘否定而是在保留跨端红利和持续产出高质量原生体验之间做了一次明确的优先级排序。对 Shopify 来说后者的价值已经明显大于前者。2. 真正被砍掉的痛点启动白屏、复杂交互与跨端性能的积重难返2.1 启动白屏为什么在电商场景里是致命的热搜词里有react native 启动白屏这不是空穴来风。RN 应用的启动链路是原生容器先启动创建 JS 引擎加载 JS bundle再执行渲染。无论怎么优化这个过程都天然比原生冷启动多几个环节。结果就是用户点击 App 图标后屏幕可能先空白一小段时间然后首屏内容才出现。在一些中小型应用里这个延迟可能只有几百毫秒用户感知不强烈。但 Shopify 面向的是全球数亿消费者启动多 300 毫秒放到大基数用户群里就是大量的打开率下降和差评。启动速度、首屏耗时这类指标在电商场景里直接与收入挂钩而 RN 在这条赛道上始终是带着脚链跑的。有人会说可以通过预加载、在原生层做闪屏拼接来掩饰。这当然可以而且很多团队确实这么干。但问题是这些优化手段本质上是在给框架缺陷打补丁补丁越多架构越复杂最终维护成本反而比一开始就用原生更贵。这恰好说明了一个道理能跑和适合核心业务是两回事。2.2 复杂交互下JS 桥和渲染层成了瓶颈RN 的核心模型是 JavaScript 线程和 UI 线程通过异步通信协作。这套模型的优势是开发效率短板也很明显业务复杂到一定程度后大量桥接通信会带来丢帧、手势延迟、内存波动。尤其在长列表、复杂动画、高频网络更新场景里JS 线程一旦被过重的计算阻塞用户在每个滑动操作上都能感知到卡顿。这几年 RN 社区也没闲着新架构 Fabric 把渲染器改成跨语言实现用 C 统一调度确实缓解了很多老问题。但对 Shopify 这种在旧架构上累积了六年业务的团队升级成本相当于给一台高速行驶的卡车换发动机。要么继续忍受旧架构的毛病要么花大量人力去过新架构这个坎。两条路都不便宜而原生方案天然没有这个问题。另外还有崩溃与恢复问题。移动端 App 的核心价值之一是稳定。RN 运行时的内存管理、异常处理在很多边界情况下不如系统原生顺手遇到 native crash 时定位问题经常要在 JS 调用栈和原生调用栈之间来回横跳调试痛苦程度直接翻倍。这种隐形成本写在任何一个项目计划里都看不见但每个加过班的移动端工程师都懂。2.3 Android 碎片化与依赖维护的隐性成本说好的一次编写随处运行实际执行起来往往是一次编写到处调试。RN 在 iOS 上的表现通常好于 Android因为 iOS 的硬件和系统环境统一而 Android 上不同的厂商 ROM、不同系统版本、不同屏幕尺寸都会把 RN 的运行时问题放大。同一个 RN 版本在原生测试机上正常换到某款国产 ROM 上就可能白屏或乱跳。解决这些问题往往要在原生层写大量条件分支跨端复用的优势被一点点磨掉。第三方库的维护则是另一个隐形黑洞。RN 生态虽然丰富但大量库是个人开源维护不是公司级支持。维护者兴趣转移或者 Apple 和 Google 发布新的系统限制这类库就可能变成团队负担。为了安全和适配团队不得不 fork 下来自己维护一堆分叉长期来看成本已经不比原生双端便宜。我自己的判断是RN 工程的原生技术债比纯原生工程更隐蔽。纯原生工程的复杂度是线性叠加的而跨端工程被框架抽象之后问题一层包一层出错链路更长排查路径更绕。Shopify 最终选择把双端团队重新立起来本质上是承认了抽象层带来的长期维护成本已经盖过了它当年带来的开发红利。3. 回归原生不只是一次技术切换成本结构、工程文化与用户价值的重新对齐3.1 原生双团队的成本结构并不是想象中那种直接翻倍很多人一听回归原生第一反应是团队规模翻倍、成本爆炸。实际上没这么夸张。对 Shopify 这种体量的公司它本来就保留着相当规模的原生工程师回归不是从零拉起而是把资源重新聚合同时调整招聘方向。真正的成本大头在迁移周期现有 RN 业务的迁移不是重写界面那么简单数据层、埋点、业务逻辑、测试用例、发布流水线全链路都要跟着搬。这个过程通常是渐进式的按模块灰度切换。中间有一段双轨并行期开发效率和人力耗散会格外严重。所以官方公告没有把话说死只用了回归原生提升体验这类表述。因为这种迁移很难设定精确完成日期更像一场持续一到两年的结构调整。任何以为今天宣布、明天就能切换的人大概率没做过正经的移动端重构。3.2 工程文化的转变从桥接缝补到直接调用系统能力还有一个容易被忽略但非常重要的点原生工程文化对团队的塑造力。RN 时代团队的大部分精力消耗在 JS 层遇到系统级能力要么绕路、要么找库、要么自己写 bridge而原生团队可以直接调用第一方 API深入系统层面做优化。这种自由度会从根本上改变工程师的工作内容和成就感。Shopify 的移动端应用不是简单页面堆叠它重度依赖相机、ARQuickLook、推送、支付、无障碍、后台任务等系统能力。这些能力在原生上是一等公民在 RN 里却总是隔了一层。回归原生之后团队在性能监控、崩溃率分析、内存优化这些工程实践上会顺畅得多不需要先翻译一层 JS 语义。我在带团队时有个明显感受RN 团队里工程师的成就感和问题归属感普遍弱于原生团队。因为一旦出问题大家说不清是 JS 代码的问题、bridge 的问题还是系统行为的问题。长期处在模糊地带里工程师的成长曲线也会受影响。Shopify 这次回归多少也有文化层面的考量。3.3 用户体感应用商店评分、NPS 与技术选型的真实连接很多技术团队做选型分析时习惯只看开发效率、包体积、社区活跃度却很少把用户体感量化成决策变量。Shopify 这次转身提醒我们终端用户不关心你的技术栈但他们会在应用商店的一星评论里告诉你真相。掉帧、白屏、闪退、冷启动慢这些词不会写成 RN 或原生但每一条都对应着技术栈的某个弱点。对电商来说购物流程中任何不稳定感知都会直接影响交易转化率。当技术债高到让产品无法快速迭代选型团队就不得不重新算账。我猜测 Shopify 一定看到了真实的数据比如 iOS 和 Android 上的崩溃率趋势、启动耗时变化、核心漏斗的流失率。这些数据最终指向同一个结论原生仍然是移动体验的天花板。这也解释了为什么热词里有人反复搜wordpress和shopify的区别——在很多人眼里Shopify 首先是一个建站平台然后才是技术选型的样本。但不管从商家工具还是消费者端来看它的移动策略最终都要回归到生意增长这个目标上。技术栈只是达成目标的工具而不是目标本身。4. 这场倒反天罡不会简单重演跨端选型的边界条件与普通团队的决策清单4.1 React Native 依然成立的使用场景尽管 Shopify 退场我仍然不认为 RN 会因此一蹶不振。对大量中小团队来说RN 的商业价值依然非常明显开发周期短、前端资源可复用、热更新便利。如果你的 App 以表单、列表、内容展示、基础电商为主交互复杂度有限RN 反而能在预算内快速把产品送上线这是原生方案很难比的。问题的关键在于规模临界点当业务复杂度、用户量、性能要求同时上升到一定高度跨端的抽象收益会被维护成本反超。每个团队都需要清楚自己处在临界点的哪一边。与其问Shopify 不用 RN 所以我该不该用不如问我的业务和 Shopify 有多像。下面这张表是我平时给团队做选型参考用的简单直观决策维度适合 RN 的场景适合原生的场景交互复杂度表单、列表、内容展示复杂动画、实时协作、高频编辑器性能要求可容忍几毫秒级延迟对冷启动、滑动帧率极度敏感系统能力依赖少量靠第三方库可覆盖深度依赖相机、传感器、底层 API团队构成前端为主原生资源稀缺已有成熟双端原生团队产品阶段MVP 验证、快速上线长期运营需要持续深度优化4.2 Flutter、Kotlin Multiplatform 和原生并不是一回事不少人看到 Shopify 回退就断言跨端已死这是典型的过度解读。Flutter 有自己的渲染引擎在高频 UI 场景下的表现和 RN 的路数不一样Kotlin Multiplatform 在做业务逻辑共享时的取舍也不同。它们各处于不同的抽象层级不能混为一谈。Shopify 选择原生是因为它到了极限场景需要榨干原生平台的每一分性能。但对另一些公司来说用 KMP 共享 ViewModel 和网络层、原生负责 UI可能是一条更稳的路。技术选型从来不是选最好的而是选代价最小的。把某个大厂放弃某技术等同于某技术全军覆没是最偷懒的思考方式。4.3 普通团队可以直接抄走的选型决策清单与其围观大厂热闹不如把这次事件当成一次校准自身决策的机会。我建议每个准备做移动端选型的团队拿到需求后先过一遍这份清单明确用户体感阈值是工具型低频应用还是高频消费类应用前者对冷启动不敏感后者对白屏和卡顿零容忍。盘点团队构成如果前端资源占主导RN 是合理选项如果要做深度系统能力优化原生或原生共享逻辑更可控。评估新架构升级成本RN 新架构是大趋势但旧业务迁移要提前算清楚工时别把技术债拖到不可收拾。先定性能预算再选型冷启动不超过多少毫秒、首屏可交互时间、滑动帧率、崩溃率上限这些指标先写死再拿候选方案去对。持续跟踪线上指标选型不是上线就结束启动时长、白屏率、崩溃率、卡顿率都要有基线隔一段时间复盘一次及时纠偏。这些清单不是万能的但能把很多团队从听说拉回数据。如果 2019 年的 Shopify 在做决定之前就把这些指标算得更重也许不用等到六年后才切换方向。5. 最后聊聊我个人的判断和建议5.1 不要因为大厂转向而恐慌也不要因为惯性而僵住我见过不少团队因为一篇文章、一个巨头的声音就推翻自己的技术路线也见过更多团队在技术债已经压顶的时候不敢转弯。这两个极端都不健康。Shopify 这次的事情本质上是把一个再常见不过的道理摆到了台面上技术选型是动态的不是一劳永逸的。当年再正确的决定也必须在业务和行业变化后重新审视。如果你现在正在用 RN 做业务我的建议是先冷静评估自己的业务规模和性能瓶颈而不是急着推翻重来。技术栈迁移不是请客吃饭它消耗的是真金白银和团队士气。但如果你已经明确感受到跨端方案在产品体验上拖后腿那就别因为已经写了六年而继续沉没成本。5.2 如果现在让我带一个移动端项目我会怎么选说实话我不认为存在一个永远正确的标准答案。就我个人当下的倾向MVP 阶段或低复杂度工具类 App会直接用 RN 快速验证如果目标是一个长期运营、对体验有极致要求的核心产品我会偏向原生双端中间态则可以考虑原生 UI 共享逻辑层比如 KMP 甚至 Rust 跨端核心模块。这个组合意味着团队里要有能写原生的人也要有能写跨端边界层的人。它不像纯 RN 方案那么省成本但也不会像双端完全隔离那么费人力。权衡下来对大多数有一定规模的公司可能更实际。5.3 一个小技巧用性能预算倒逼选型最后分享一个我这些年一直用的方法。做技术选型时不要先聊框架先把性能预算定下来冷启动耗时、首屏可交互时间、页面滑动帧率、崩溃率上限、包体积上限全部量化。然后拿候选方案和这些指标逐条对照凡是需要靠打补丁才能接近预算的方案直接排除。Shopify 的教训本质上就是这份性能预算没能在 2019 年被严格执行才让六年时间沉淀成了沉重的迁移成本。用这套方法很多项目其实在写第一行代码之前就能避开那些注定要还的债。技术选型从来不是一道纯技术题而是一道资源配置和风险预判的题。想清楚这一点你大概就能明白 Shopify 为什么会走这趟回头路了。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门