01|跨端总会一次次回来

如果把前五篇连起来看, 你会发现一件特别明显的事。

这些路线看上去差别很大:

  • Flash
  • Hybrid
  • React Native
  • PWA
  • Electron

它们的宿主不同, 时代不同, 卖点不同, 失败方式也不同。

可它们底下始终都在反复回答同一个问题:

能不能少养几套世界?

也就是说, 写到最后最值得追问的, 已经不是:

“哪一个框架最后笑到了最后?”

而是:

为什么这个行业明明知道跨端永远有代价,却还是会一遍遍重新发明跨端?

这背后真正推动它不断重生的, 不是单点技术更新。

而是三层更深的力量一直没消失:

  • 经济压力
  • 平台边界
  • 工程复杂度

只要这三层还在, 跨端就一定会继续回来。

只是名字和形态会变。


02|企业到底在买什么?

跨端最深的一层驱动力, 永远先是经济学。

因为只要多端现实一直存在, 企业就会持续面临这些问题:

  • 一套业务要铺 iOS、Android、桌面、Web
  • 多端协同成本高
  • 发版节奏不一致
  • 多套团队贵
  • 招聘也分裂

这时候, 任何一种看起来能把人力复用率拉高的抽象层, 都会天然有吸引力。

所以跨端不是偶然冒出来的时尚词。

它更像一种周期性金融冲动:

企业会不断问,能不能用一个中间层,换回更少的人、更快的交付和更统一的产品节奏。

只要这笔账还有诱惑力, 跨端就不会退出历史。

这也是为什么每一代方案刚出来时, 总能迅速得到关注。

因为它们卖的从来不只是技术。

它们卖的是:

组织效率。


03|平台永远不肯把门彻底打开

可如果只有企业这一层冲动, 跨端也许真可能慢慢走向某种统一答案。

问题在于, 另一股力量也一直在:

平台不一样,而且平台也不想失去主权。

这里的平台差异, 从来不只是:

  • 控件长得不一样
  • 动画曲线不一样
  • 某个 API 名字不一样

更深的差异其实在于:

  • 生命周期
  • 安全模型
  • 分发路径
  • 审核制度
  • 支付利益
  • 与开发者的关系

所以跨端之所以永远撞墙, 根本原因不是“工程师还不够聪明”。

而是:

你试图统一的,本来就不是几套长相不同的界面,而是几套利益、制度和宿主边界都不同的世界。

而平台一旦觉得某种抽象层开始威胁:

  • 能力解释权
  • 更新节奏
  • 分发入口
  • 平台税收

它就会马上把这个问题从技术话题升级成边界话题。

这也是为什么:

  • Flash 会撞上 Apple
  • PWA 会不断碰到 App Store 与 WebKit 边界
  • 很多跨端路线都会在“接近平台核心处”突然变得更难

因为抽象层可以协商, 但主权很少轻易让渡。


04|复杂度到底去了哪里?

这是整套系列里最该反复记住的一句。

很多人看跨端史, 会不自觉用“老框架输给新框架”的思路去理解。

可那样会看得很浅。

因为真实发生的事更像是:

每一代新方案,都是把上一代最痛的复杂度挪走,然后在别处重新长出新的复杂度。

你回头看会特别清楚:

  • Flash 把浏览器碎片吞掉,结果把运行时主权问题做大
  • Hybrid 把原生双端开发成本吞掉,结果把体验账单压给 WebView
  • React NativeWebView 换掉,结果把复杂度压到桥接和生态协同
  • Electron 把桌面多平台差异吞掉,结果把资源税直接摆到用户机器上

所以跨端史真正最稳定的一条规律是:

复杂度永远都在。

争论只在于:

  • 谁来扛
  • 扛在哪一层
  • 什么时候爆出来

只要这条规律不变, 跨端就不可能出现一个彻底免税的终局方案。


05|跨端注定没有终局

很多人内心其实一直在等一种答案:

会不会有一天, 某个方案终于足够成熟, 让跨端这件事彻底收束成标准现实?

理论上当然可以想象。

可现实里, 它至少要同时满足三件事:

  1. 主要平台能力和体验预期高度收敛
  2. 平台利益与分发利益高度一致
  3. 某种抽象层既足够统一,又几乎不制造新的性能税和组织税

这三件事几乎不可能同时成立。

第一件事已经很难。

第二件事更难。

因为平台之间不仅技术不同, 还各自有:

  • 商业模型
  • 审核逻辑
  • 支付体系
  • 生态绑定方式

第三件事则更像理想。

因为只要有抽象, 就必然会有:

  • 映射成本
  • 维护成本
  • 性能成本
  • 演进成本

也就是说, 跨端没有终局, 不是因为行业还没努力够。

而是因为它要终局, 本来就要求太多外部条件一起成立。


06|未来真正会稳定下来的,会是哪几层?

如果没有终局, 那有没有相对稳定的方向?

我认为有。

而且它已经越来越清楚了。

未来更可能稳定下来的, 不是那种高举高打的统一口号。

而是这种更分层的现实:

  • 业务逻辑层尽量共享
  • 设计系统层部分共享
  • 数据模型和状态管理尽量共享
  • 渲染层视场景决定
  • 宿主能力层明确暴露差异
  • 分发、审核、支付层继续强平台化

换句话说, 跨端更像会收束成一种:

选择性统一。

这听上去没那么浪漫。

却更接近真相。

因为它终于不再试图把所有问题塞进同一把锤子里。

它开始承认:

不是所有层都值得统一, 也不是所有差异都应该被藏起来。

这就是为什么今天很多成熟团队讨论跨端, 问的已经不是:

“要不要跨端?”

而是:

“跨到哪一层最划算?”

这其实就是跨端史最成熟的阶段性答案。


07|新一代框架总会继续出现

这条结论也很重要。

因为一旦你接受“跨端会长期存在,但不会终结”, 下一个问题自然就是:

那它为什么还会不断重生?

答案其实也不复杂。

因为决定“哪一层最适合统一”的条件, 从来都不是固定的。

它会随着这些东西变化:

  • 硬件变强或变弱
  • 宿主能力开放或收紧
  • 平台政策变化
  • 团队结构变化
  • 工具链进步
  • 某种语言或生态的人才供给变化

只要这些条件一变, 行业就会重新算一次账:

之前觉得太重的抽象,现在是不是可以承受了?

之前看起来很划算的统一,现在是不是税太高了?

于是新一代跨端就会再次出现。

它看起来像新框架革命。

可本质上更像:

外部条件变化后,对“统一哪一层最划算”这道题的一次重新求解。

所以跨端的“重生”, 并不神秘。

它只是现实重新算账的结果。


08|最后到底该把跨端看成什么?

如果把前面五篇都读完, 最后最值得带走的, 我觉得就是这句:

跨端不是一条通向终局的路线,而是一场不会结束的复杂度协商。

这句话里面有四层意思。

第一, 企业会持续想买统一开发。

第二, 平台会持续守住宿主边界和入口权。

第三, 抽象层会持续重分配复杂度,而不是消灭复杂度。

第四, 真正成熟的跨端,不是统一一切,而是知道哪些层该统一,哪些层该暴露。

所以这套《跨端江湖》如果只记最后一句, 我希望是这句:

跨端不会终结,因为企业想统一、平台想控制、工程想降复杂度、用户又不肯为抽象层税无限买单;这四股力量谁也不会退场,所以跨端永远只会从“统一一切”的幻觉,回到“选择性妥协”的现实。


如果把整套系列压缩成六句话

  1. Flash 证明第三方运行时一旦太像平台,就会撞上平台收权。
  2. Hybrid 证明统一开发最容易把体验账单压给宿主浏览器。
  3. React Native 证明现代跨端真正成熟的标志,是主动收缩承诺。
  4. PWA 证明开放 Web 一旦太像 App,就会碰到平台入口边界。
  5. Electron 证明很多企业宁可为资源税买单,也要换统一组织。
  6. 整条跨端史最终证明:复杂度从来没有消失,它只是在不同层之间搬家。

编者注(事实核对):本篇为系列收束,前半部分基于前五篇涉及的一手材料与历史节点作综合判断;后半部分关于“跨端不会有终局、只会走向分层共享与选择性统一”的论述,属于在多条技术史、平台政策、运行时代价和组织实践之间作出的系列总判断。


参考与延伸阅读

  1. Thoughts on Flash
    https://web.archive.org/web/20100502021750/http://www.apple.com:80/hotnews/thoughts-on-flash/

  2. Introducing React Native
    https://legacy.reactjs.org/blog/2015/03/26/introducing-react-native.html

  3. Update on apps distributed in the European Union
    https://developer.apple.com/support/dma-and-apps-in-the-eu/

  4. Performance | Electron
    https://electronjs.org/docs/latest/tutorial/performance

  5. Reducing Slack’s memory footprint
    https://slack.engineering/reducing-slacks-memory-footprint/