今天很多人已经把这些词当成了默认现实:

  • React Native
  • Flutter
  • Electron
  • PWA
  • 小程序
  • Tauri

好像只要产品一上多端,团队就一定会认真讨论一次:

能不能少写几份代码?

可很少有人会先问一句:

为什么“一套代码到处跑”这件事,明明这么多年从来没真正圆满过,却还是会每隔几年就以一套新名字重新复活一次?

为什么每一代跨端方案刚出来时,都像在宣布旧世界终于要结束了:

  • 有的说统一运行时
  • 有的说统一 Web 技术栈
  • 有的说统一 UI 心智
  • 有的说统一团队组织

可走到最后,它们又几乎都会退回一种更克制、也更现实的说法:

逻辑尽量共享,体验按需原生,差异别再假装不存在。

为什么跨端这件事,表面上看像技术选型, 底下却总能一路连到:

  • 平台控制权
  • 分发入口
  • 审核与支付
  • 性能预算
  • 团队组织
  • 工程复杂度

这套 《跨端江湖》,想讲的就是这些事。

它不是跨端框架教程。

也不是“十分钟看懂 React Native / Flutter / Electron 区别”的速食横评。

它更像一部长剧。

而且是一种特别典型的现代软件长剧:

一开始像统一开发的梦想,中间像运行时和宿主的战争,后来像平台入口之争,到今天又越来越像一场围绕复杂度应该压给谁的长期协商。

你可以先把这套系列记成六幕:

  1. 2000s 前后,Flash 让很多人第一次相信:第三方运行时也许真能把多端统一掉。
  2. 2009 年后,PhoneGapCordovaHybrid 把“网页做 App”变成了工业化路线,但也把 WebView、桥接和体验摩擦全暴露了出来。
  3. 2015 年,React Native 明确告诉行业:别再幻想“写一次到处跑”,更现实的路是先承认宿主差异。
  4. 同一时期,PWA 试图把应用入口从商店拉回 Web,可一旦它太像 App,就会碰到平台边界。
  5. Electron 让桌面跨端变成企业现实,也顺手把另一个真相讲得特别直白:很多时候,公司买的不是最省资源的程序,而是最省组织摩擦的程序。
  6. 走到今天,跨端越来越不像“统一一切”的革命,更像“哪些层值得统一、哪些层必须暴露差异”的长期妥协。

这六幕一连起来,你就会发现,这套系列真正想讲的,不是哪家框架后来更火。

而是另一件更大的事:

跨端史不是“一套代码到处跑”的胜利史,而是一代代方案围绕原生能力、平台入口、运行时成本和组织摩擦,不断重新分配复杂度的历史。


这套系列讲什么

我想讲的,不只是:

  • Flash
  • Cordova
  • React Native
  • PWA
  • Electron

分别是什么。

更想讲的是底下那几场反复重演的冲突:

  • 为什么企业总想用抽象层买效率
  • 为什么平台总会用现实边界收回抽象层
  • 为什么每一代跨端方案都会先承诺统一,最后又退回分层共享
  • 为什么跨端性能从来不只是跑分,而更像“这层抽象还能不能被允许存在”的审判标准
  • 为什么很多跨端路线最后不是死在技术不能用,而是死在平台利益、生态维护和组织成本一起变重
  • 为什么今天更成熟的跨端,反而更少说“统一一切”

换句话说,这是一套关于 跨端复杂度分配史、平台边界史、运行时权力史,以及企业如何反复为统一开发付费 的系列文章。


这套系列真正要追的,不是框架名单,是复杂度到底该压给谁

如果你退一步看,会发现跨端这些年的很多争论,表面上主角不同,底下其实一直在争几件更硬的事。

01|企业到底愿意花多少钱,来少养几套团队

跨端最底下的一层,从来不是技术浪漫主义。

它首先是经济问题。

因为只要一个团队同时面对这些压力:

  • 人力成本太高
  • 交付窗口太短
  • 多端协作太慢
  • 产品一致性要求越来越强
  • 招聘市场决定某种技术栈更好扩团队

它就迟早会再次认真问一句:

能不能别为同一套业务逻辑养两三套完全独立的人马?

所以跨端之所以反复出现,不是因为行业爱幻想。

而是因为企业真的会一遍遍想买这份效率。

02|平台差异为什么永远不只是 UI 差异

很多人刚接触跨端时,会天然把多端理解成“多几个皮肤、多几套控件风格”。

可事情根本没这么简单。

不同平台底下真正不一样的,是这些东西:

  • 输入模型
  • 生命周期
  • 宿主能力
  • 分发制度
  • 审核规则
  • 支付边界
  • 安全模型
  • 平台自己的利益诉求

也就是说,跨端最大的困难从来不只是按钮长得不同。

而是:

不同端其实不是多套外观,而是多套制度。

这也是为什么“一套代码到处跑”总会在现实里被拉回一句更残酷的话:

你到底想统一什么?

03|每一代跨端方案,真正做的不是消灭复杂度,而是转移复杂度

这条线特别关键。

因为如果不看懂这一层,你就很容易把跨端史误会成:

  • 老方案失败
  • 新方案更先进
  • 再下一个方案更接近终局

可真正发生的事更像是:

上一代方案把旧问题吞掉了, 然后又把新问题堆到别的层。

比如:

  • Flash 把浏览器差异吞掉,却把平台控制权问题做大
  • Hybrid 把开发门槛压低,却把体验账单交给 WebView
  • React NativeWebView 问题挪走,却把压力转移到桥接、生态和组织协同
  • Electron 把桌面开发统一了,却把包体、内存和运行时税摆到了明面上

所以这套系列会反复追问:

同一份复杂度,最后到底被压给了用户设备、开发者、框架作者、平台方,还是公司组织?

04|性能为什么在跨端世界里总像“合法性审判”

很多技术文章谈跨端性能,最容易停在:

  • 启动时间
  • 动画帧率
  • 内存占用
  • 包体大小

这些当然重要。

可如果只停在这里,跨端史就会被写浅。

因为在跨端世界里,性能经常不只是产品指标。

它更像一套特别现实的审判标准:

  • 这层抽象会不会拖垮体验
  • 它有没有资格插在平台和开发者之间
  • 平台能不能借“安全与性能”之名把它挡在门外

这也是为什么很多跨端路线的真正命运, 往往不是写在技术白皮书里, 而是写在:

  • 电池
  • 卡顿
  • 审核
  • 入口
  • 分发

这些东西上。

05|为什么跨端不会有真正终局

很多行业路线最终都会收束成一种大家默认接受的现实。

可跨端大概率不会。

因为跨端要真正终局,至少得同时满足三件事:

  1. 主要平台能力几乎等价
  2. 主要平台利益基本一致
  3. 某种抽象方式既能统一开发,又几乎不制造新的性能与组织成本

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

尤其第二件事最难。

平台从来不是纯技术对象。

平台还有:

  • 分发利益
  • 支付利益
  • 安全叙事
  • 入口控制
  • 与开发者的关系

所以跨端更可能迎来的,不是“终于统一”。

而是:

阶段性稳定。

也就是:

  • 业务逻辑层越来越统一
  • 设计系统层部分统一
  • 渲染层继续分化
  • 宿主能力层继续保留差异
  • 分发与支付层继续强烈受平台控制

为什么今天的开发者还得关心这些旧账

因为你今天面对的,其实已经不只是一个框架选型表。

你面对的是一整套由跨端历史塑造出来的现实:

  • 为什么越来越多团队讨论的不是“要不要跨端”,而是“跨到哪一层”
  • 为什么大家一边嫌 Electron 重,一边又不断继续用
  • 为什么 React Native 和 Flutter 明明都叫跨端,底下却像两种完全不同的哲学
  • 为什么 PWA 永远像差一点,却又永远不会彻底死掉
  • 为什么很多现代跨端讨论,最后会滑向平台控制权、支付和分发入口

如果不看这些过程,你就很容易把今天的跨端误会成一组工具对比。

它不是。

它更像一场长期协商:

  • 企业想统一
  • 平台想控制
  • 用户想流畅
  • 工程想可维护

而每一代跨端框架, 都只是这四股力量在某个时间点谈出来的一份暂时协议。

看懂这点,你回头再看今天的跨端世界,就会更明白:

跨端最值得写的,不是哪种方案终于赢了,而是为什么这个行业会一遍遍重新发明“统一开发”的承诺,又一遍遍被性能、宿主能力和平台控制权逼回更现实的妥协。


推荐阅读顺序

01|跨端江湖(一):苹果杀死的到底是 Flash,还是开发者绕开平台的权利

先看这篇。它会把跨端这条线从一开始就立成“平台和中间层的战争”,而不是单纯技术兴衰。

02|跨端江湖(二):为什么“网页做 App”最痛的时候,不在 JavaScript,而在 WebView

这一篇最适合把很多人对 Hybrid 的模糊印象,重新落回真实的运行时代价和宿主碎片化。

03|跨端江湖(三):React Native 最重要的历史,不是多像原生,而是它主动放弃了“写一次到处跑”

看懂这篇,你会明白现代跨端为什么越来越像“承认差异”,而不是“消灭差异”。

04|跨端江湖(四):PWA 最尴尬的地方,不是做不到像 App,而是一旦太像 App 就会碰到 App Store

这篇会把开放 Web 路线和平台入口权的冲突讲透。

05|跨端江湖(五):Electron 为什么明知很重,还是成了桌面跨端的现实答案

这篇最能把“企业买的不是最省资源的程序,而是最省组织摩擦的程序”这层逻辑立住。

06|跨端江湖(六):跨端为什么不会终结,只会继续回到选择性妥协

收束篇。最后会回到一个更现实的问题上:跨端真正稳定下来的,到底不是统一代码,而是统一什么层值得共享。


如果你只想先读三篇

可以先看这三篇:

  1. 第二篇:看 Hybrid 为什么把“统一开发”变成了运行时债务
  2. 第三篇:看 React Native 为什么代表跨端承诺的收缩
  3. 第五篇:看 Electron 为什么说明组织效率有时比资源效率更值钱

这三篇最能把整套系列的脾气读出来。


为什么想写这套

因为今天很多人谈跨端,谈得都太像消费指南了。

大家会问:

  • Flutter 还是 React Native
  • PWA 还值不值得做
  • Electron 会不会太重
  • 要不要上 Tauri

这些问题当然都重要。

可如果只停在这里,你就会把跨端误会成一套不断更新的框架排行榜。

而我更想写的,是这些问题底下那条真正更长的历史:

  • 为什么企业总是忍不住想重新买一次统一开发
  • 为什么平台总会在关键时刻提醒你它才是宿主
  • 为什么抽象层每次看起来都像在解放开发者,最后却常常又变成新的负担
  • 为什么“统一”这个词在软件世界里,往往不是终局,而是一种阶段性议价结果

如果把 框架江湖 写的是谁来定义浏览器端应用结构, 把 前端工程化江湖 写的是谁来接住 Web 应用化之后爆炸出来的交付复杂度,

跨端江湖 要写的,就是:

当企业、平台、用户体验和工程复杂度都不肯退的时候,大家到底怎样围着“统一开发”这件事,一轮轮重新谈条件。


先记住:跨端真正稳定下来的,不会是“一套代码到处跑”,而是“共享能共享的,暴露必须暴露的”

如果你平时把跨端理解成效率工具,这套系列也许会让你第一次认真意识到:效率从来不是白来的。

如果你平时把跨端理解成技术折衷,这套系列也许会让你更明白:

很多折衷并不是技术做不好,而是平台、分发、性能和组织这几笔账,本来就不可能同时算得特别漂亮。

所以看这套《跨端江湖》,最好别总盯着“下一代框架是谁”。

那只是牌桌上的名字在换。

真正一直没换的,是那道老题:

企业想少养几套人,平台不想让出解释权,用户不肯为抽象层税无限买单,工程团队又总想把重复劳动压下去。

谁也不肯退,跨端就不会停。

所以它从来不只是框架更替史。

它更像软件世界里一场反复换人、但从不散场的长期谈判。


关键人物速览

  • Steve Jobs:理解平台为什么会排斥第三方跨平台层,绕不开他。
  • Kevin Lynch:理解 Adobe 当年怎样把跨平台自由写成自己的正当性,绕不开他。
  • Tom Occhino / Sophie Alpert:理解 React Native 为什么主动缩窄承诺,绕不开他们。
  • Gabriel Peal / Airbnb 移动团队:理解跨端如何从技术问题外溢成组织问题,绕不开这条线。
  • Slack 工程团队:理解 Electron 为什么不是“无知地重”,而是“有意识地权衡”,他们的材料非常关键。

参考与延伸阅读

  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. Reducing Slack’s memory footprint
    https://slack.engineering/reducing-slacks-memory-footprint/

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