关注多端 GUI 解决方案将近十年了。
十年来,像 RN 、Flutter 这样的自绘 UI 不少,大多都是昙花一现。
当前无论做什么应用,一旦涉及到多端,最终都会回到 Web 技术栈。但是 Web 也没有真正通用的标准。一些美好的规范,像 PWA ,早已做土;反而 Cordava 倒是在不温不火地发展。
唯一能满足『 Write once, run anywhere 』的只有 Electron 等 CEF 框架或者近几年兴起的 Tauri 等 Webview 框架,赋予 Javascript 原生能力,即兼顾开发速度,也有充实的生态。
很好奇,图形界面出现四十多年了,Web 时代也有快二十年了,手机也诞生十五年了,但是为什么 GUI 还没有大一统的解决方案?
GUI 真的没有银弹吗?
![]() |
1
musi 2 天前
PWA 做土了?你正在访问的这个站还是 PWA
|
![]() |
3
Removable 2 天前
@Leon6868 咦,我怎么记得 iOS 18 还修复了一些对于 PWA 支持的 bug 呢?比如 17 的时候 pwa 应用有时无法正确地跟随系统切换到夜间模式,到 18 就修复了
|
![]() |
4
BingoXuan 2 天前 ![]() 因为 GUI 太复杂。GUI 可以分成 retained 和 immediate 模式。Web 以及原生都是 retained 模式。style 和 layout 和 event 等影响渲染因素轮不到开发者控制,只能遵循平台规范。同样的效果要编写的代码又是不一样的。根本没办法复用。immediate 可以让开发者使用同一套逻辑渲染所有平台的效果。但难以实现复杂的动画效果以及每次重新渲染带来的性能损耗和功耗。
此外还有一个最大的难点就是异步处理。主 ui 渲染时候如何和数据线程同步也是非常头痛的问题。不同平台的方案又不一样。尤其是 web ,不光要写前后端代码,还要尽可能避免大数据量交互时候性能问题。 |
5
RightHand 2 天前 via Android
没有银弹 不说其他的,指针跟触摸就是完全不同的逻辑
|
![]() |
6
shadowyue 2 天前 ![]() 我觉得现阶段的银弹就是 chrome 套壳,没人打得过
|
![]() |
9
hronro 2 天前 via iPhone
RN 可不是自绘,是真正用的系统的原生 UI 。
|
12
jackOff 2 天前
资本家肯定是希望垄断自己的私域生态的,又不可能出现几家互相妥协的场面,估计只有最终赢家把所有平台厂商收购或者干破产才有这种希望了
|
![]() |
13
Leon6868 OP @BingoXuan #4 非常深刻的回答!
retained 和 immediate 是完全不同的设计思路,但是似乎 immediate 能实现的 retained 都能实现,而且从架构上来讲,retained 将 style 、layout 与高层逻辑(业务)代码隔离,应该是更优秀的方法?有 immediate 能实现而 retained 不能实现的吗? 异步是老生常谈的问题了,不过在 retained 模式下,搭配状态机,异步设计其实很自然(也可能是我想得太简单了,望指正);而且其实性能问题算是边界情况,大部分情况下,只要遵循一些基本原则,是很难碰见性能问题的? 但是这还是无法解释,为什么直到现在,都没有一款引擎、一个框架,能够在全端大一统地解决性能、视效问题? 或者说实际上 Webview ( CEF ) 已经能解决 90% 了,但是为什么移动端的大家都在拼命逃离 Webview ,创造像 Flutter 一样的渲染引擎? |
![]() |
14
Leon6868 OP @chiaf #8 pwa 对于 twitter reddit 来说只是放置在手机桌面的快捷方式+缓存,它们并未使用任何 pwa 的特性(储存?通知?);
PWA 能做的,Web 都能做,Web 不能做的,PWA 几乎也不能做。这就是为什么 PWA 的唯一用途就是快捷方式,甚至部分国内手机系统可能都不支持。 |
15
hwdq0012 2 天前
qt qml 写 windows, mac, linux
rn 写 android, ios rn 其实脸书做出来时只 android + ios 但微软支持了 windows 和 mac https://microsoft.github.io/react-native-windows/resources 这是微软的 rn for windows 控件库 https://github.com/microsoft/react-native-gallery |
![]() |
16
liuliuliuliu 2 天前
关注多端 GUI 解决方案将近十年了,有试过 MAUI 和 Avalonia 吗?
|
17
mxT52CRuqR6o5 2 天前
@Leon6868 #10 按照我的理解 RN 的 yoga 是把双端各自的布局系统抽象成一个统一的 flex 布局系统,一个 RN 的滚动容器,如果不监听滚动事件,渲染完成后的性能等同于 native
|
19
craftsmanship 2 天前 via Android ![]() 本来 Web 就是那颗银弹呀 不集中力量继续发展 Web 推动标准化发展和实现 忙着各自圈地称王呢 技术是次要的 利益才是最重要的
|
![]() |
20
Leon6868 OP @liuliuliuliu #16 Avalonia 略有耳闻,但是这是专属于 .net 的玩意,并不算真正的通用
由 Xamarin 而生 MAUI 是微软混乱产品线的牺牲品,没有未来,不如 Flutter |
21
hwdq0012 2 天前
@Leon6868 #18 怎么理解这句话,windows app 是指在 windows 商城里的程序吗?, 我还没开始尝试 rn 的桌面, 但据我所知,office 和 xbox 的新模块都是 rn 写的
|
![]() |
22
hhecoder 2 天前 ![]() Flutter 怎么昙花一现了?如果要兼容移动端和桌面端,算是目前的最优解了
|
24
hwdq0012 2 天前
@craftsmanship #19 web 做做表单还行 模型推理, 音视频, h264 等解码 这些, 都很鶸, 点云 3d 这些
|
26
hez2010 2 天前 ![]() @Leon6868 Avalonia 可以 NativeAOT 直接编译到机器码在目标系统上无需 runtime 直接原生运行,甚至包括 wasm 平台在内。不知道你所说的“通用”是什么,任何的应用框架都会绑定到一个特定语言或者平台上,不存在什么所谓的通用的框架。
|
![]() |
27
angrylid 2 天前
你把 WebApp 当 GUI 的话,你现在访问这个网站就支持很多平台…
另外,桌面端和移动端在交互上有个矛盾源自于鼠标指针和拇指的差异。 具体的说就是,鼠标交互有双击,右键,指针悬停,选中范围 手指点按没有那么精确,但却有双指,三指,指关节敲击。 不管你怎么绘制图像这种问题都存在。 |
![]() |
28
fors 2 天前 via iPhone
java swing 最好的 GUI 框架,配合上 java 的生态无敌
|
![]() |
29
anivie 2 天前
网页本身不就是银弹吗,基本满足大部分幻想了吧,性能什么的大部分人都遇不到,遇到了现在也有很多人在积极解决,wasm 什么的
|
30
craftsmanship 2 天前 via Android
@hwdq0012 你说的这些已经脱离狭义的 GUI 范围了 另外 WASM WebGL WebGPU 这些规范也都在缓慢演进 为什么是缓慢?还是上述观点 Web 本身就已经非常复杂 需要各大厂商协力推进才能继续发展 结果呢?现在浏览器已经死得只剩 Chromium 了 Firefox 都成了 others
另 小程序已经证明了绝大多数应用根本没必要是原生的 必须事先下载安装在本机才能使用的 你如果觉得小程序没问题 那 PWA 就是更好更自由的小程序 本来 PWA 有很好的前景 为什么 2025 了会被楼主称为“早已做土”了呢?因为它动了原生 app 的蛋糕 没人肯好好支持它 完善它 |
![]() |
31
anivie 2 天前 ![]() op 可以了解一个叫 slint 的新解决方案,一个语言写 UI ,其它语言写逻辑,感觉也挺银弹的
|
33
Tomatopotato 2 天前
没有银弹,复杂的问题必然对应复杂的答案。GUI 没有完美六边形答案,如果有几个方面做的很强那必然其余方面会是短板。就比如 web 确实是个跨平台通解,但是是用性能和表现力换的。
|
![]() |
34
chiaf 2 天前
@Leon6868 #14 而且支持 pwa 和不支持的很容易就能看出来。Safari 中「添加到桌面」后,从桌面上打开,有地址栏的就是不支持的,没有的,跟 app 体验几乎一模一样的是支持的。
v2 之前是支持的,不知道什么时候不支持了。之前在 Discord 上还看到有人问了,后面又添加了 pwa 支持,但是只是首页,点击某个帖子是用的类似于 SafariController 这样的控件打开的😅,跟 twitter 和 reddit 的体验完全不同。 |
![]() |
36
jlkm2010 2 天前
没有银弹
|
![]() |
37
liuliuliuliu 2 天前
@Leon6868 #20 没太明白,什么叫“真正的通用”?
|
![]() |
38
Leon6868 OP @craftsmanship #30 我认为 PWA 做土的主要原因是它依附于浏览器,任何人都不希望被他人束手束脚
|
40
shui14 2 天前
怎么说呢,flutter 刚出来时我就说了,它将成为 rn 的一种实现。去年看到过一个博主无聊整了一个 react-skia
gui 的话,现在亮点是 gpui ,长桥刚出了一个 ui 包。另外 rust 那边也有新路线,c++这边的 dawn 目前没人往 ui 上面带,都在搞底层硬件光追那些。不过第三方产品很多,比如 riveo 和 rive ,这是两个产品,一个是 metal 做视频特效,一个自己开发的抽象层做交互取代之前的 lottie |
![]() |
44
ragnaroks 2 天前
可以接受重复渲染损耗的话,unity3d unreal 这些游戏引擎就是真正的跨平台 GUI
|
![]() |
46
BingoXuan 2 天前
@Leon6868
retained 可以抽象和提高复用,但就没办法多端复用了。比如 web 的 flex 布局在 swiftui 难以实现。immediate 可以实现任何效果,涉及渲染的状态改变最后又变成了 retained 类似的东西。比如用 immediate 实现组件的销毁动画就必须实现 retained 状态机。所以针对不同使用场景,两者哪个更适合而已。 大部分情况下性能还是够的,但异步是需要配合各自 retained gui 框架的。swiftui 的 task ,web 的 promise ,qt 的 slot&signal 都是实现异步的机制。如果你说要大一统解决方案,那就只有 rxswift ,rxjs ,rxcpp 的 rx 框架。 一方面 web 标准过于庞大了,但又非常零散。时到今日,前端面试问题还会问如何居中。另一方面,js 不是系统级语言。因此需要编写后端桥接。中间需要做了很多额外工作。 |
![]() |
47
BeiChuanAlex 2 天前
今年的 ios26 发布,flutter 估计也要进行坟墓了。。。。。。
|
48
wanmyome 2 天前
qt/lazarus/wxwidgets 有推荐的吗
|
![]() |
49
feikaras 2 天前
无银弹。这世界没魔法。就连 native gui 都不看重效率的今天,那么多人对 win11 ui 无反应的今天,这话题早就过期了。
|
![]() |
50
treblex 2 天前
有没有人试过 godot ,他的 ui 主题还是挺适合做 app ,也能降低刷新率来适应 app 模式
https://popcar.bearblog.dev/using-godot-for-gui-app-development/ |
51
craftsmanship 2 天前 via Android ![]() @Leon6868 GUI 技术里还有比 Web 历史更久 标准更完善 跨平台更多 应用更广泛的吗?如果说 Web 还叫束手束脚 那其他家的技术局限性更强 更不完善 怎么偏要用其他呢?所以还是那个观点 技术无关 利益至上
|
52
craftsmanship 2 天前 via Android
@Leon6868 另外如果连 Web 都搞不定 我不相信还会有其他哪家的技术能搞定 各大厂商联合起来推了这么多年的技术都搞不定 仅靠其中某一家想一统江湖简直是痴人说梦 如果大家非要另起炉灶再联合起来推个新的 那一定是得有划时代的 比现有的更先进的人机交互界面 Web 完全满足不了 才有可能
|
54
shui14 2 天前 ![]() @Leon6868 我搜了一下,找到 https://github.com/wcandillon/react-native-webgpu
不过也没毛病 之所以说 flutter 会成为 rn 的一种实现,是因为 react 架构太优秀,我一直强调 r 是用 jsx 描述 ui 结构,而不是 web ,对于 web 的抽象层是 react-dom 。这一点恐怕很多人从 class 错到 hook 。 基于此,假设想要适配某个平台,或者增加声明式减少模版代码。只需要重写或者拓展 react-dom 就行,而且非常方便,君不见社区一大把,比如用 webgl 来做 ui ,那你觉得算不算呢,比如模块化的 three 与 cesium ,分别是 pmndrs 和 resium ,这些项目挺有意思的,起码比天天在那里复制 ui 库有意义,ui 讲究设计风格,而不是技术绑定 |
![]() |
55
villivateur PRO 不考虑开发者的精神状态的话,其实 Qt 已经算很好了。
|
56
hingle 2 天前
Flutter 都用没什么生态的 Dart 了,Avalonia 用 .NET 怎么就不通用了?
|
57
charlie21 2 天前
slint 的新解决方案看了一下,感觉它发展到最后可能就像 flutter ,或者说 flutter (dart 写 UI, dart 写界面逻辑) 就像 slint 的一个变种 只不过都限于 dart 而已
|
58
charlie21 2 天前
像 VScode 编辑器和 Slack 这种多端聊天软件, 支持 win mac web 多端,如果你的需求也是表单(不涉及高性能渲染),那么它们用的是 Electron 框架
|
![]() |
59
menglizhi2333 2 天前
GUI 跨端银弹一直都有啊,2d/3d 渲染引擎, 就能帮助你直接在各个终端得到非常非常接近的体验参考:游戏和模拟器
但如果要做跨端软件的话,就不存储银弹,因为各个操作系统都存在各种各样的差异,简单举例:文件存储方式,软件安装,系统 API 调用 等等,目前能将这些都整合好,且不会出问题的平台,只有浏览器或者说 Web 平台( PS: 这也是历史的结果),所以软件会选择用 electron ,Tauri 等 web 封装方案,也是因为 Web API 能提供所需功能,如果 Web API 不能满足软件需求,最终还是得要回落到原生开发的 |
61
hwdq0012 2 天前
@alleluya #60 不清楚, 我最近一个月才开始玩 rn + c++的方案,还只是周末玩, 不过看提交时间,rn for windows / mac 确实有 6 7 年往上的时间了
|
![]() |
62
minami 2 天前
没有。
为什么要执着于大一统? |
63
hcy 2 天前
idea 插件开发用什么好点 ?界面比较复杂,还是啃 Swing 么?
|
65
xinyu391 2 天前
永远不会有大一统方案,技术都是在不断迭代,
只会一个技术出现,另一个倒下。 当然也有技术会持续存在(比如 Qt ),但永远不会是大一统。 不仅是因为 OS 层就有很多,Language 层更是层出不穷。 |
66
DefoliationM 2 天前 via Android
有的,不是有很多人吹 kotlin 的 kmp 和 compose 吗,那个可能满足你的要求。
|
![]() |
67
janus77 2 天前
你看哪个东西有银弹的,web 端自己都是不断变化的,一开始 jquery ,后面 ARV 三分天下,再后面各种框架遍地开花,你 web 端自己就高贵了?
|
68
charlie21 2 天前
GUI 可以分成 retained 和 immediate 模式 - Google Search 我找到了文章
保留模式与即时模式- Win32 apps https://learn.microsoft.com/zh-cn/windows/win32/learnwin32/retained-mode-versus-immediate-mode 这篇文章谈论了 Graphics APIs, 而非具体的框架: "图形 API 可以分为 保留模式 API 和 即时模式 API 。Direct2D 是即时模式 API 。Windows Presentation Foundation ( WPF )是保留模式 API 的示例。" 原文 Graphics APIs can be divided into retained-mode APIs and immediate-mode APIs. Direct2D is an immediate-mode API. Windows Presentation Foundation (WPF) is an example of a retained-mode API. 这里我可以类比: Skia 就是 Direct2D 这种 graphic engine. 任何你可以想到的 GUI framework 就是 WPF 等 GUI framework. 它是基于 Skia 之上的 则在你寻找具体的框平台框架的时候,你希望找到的是 GUI framework, 此时你并不在乎 graphic engine (你并不在乎一个 GUI framework 底层在用什么 graphic engine). 所以 “分成 retained 和 immediate 模式” 是无法帮助找到一个跨平台 GUI framework 的 |
![]() |
69
dandycheung 2 天前 via Android
同一个 GUI 框架,在不同平台上的评价主要分两个层面:一、可不可用;二、易不易用。这两者又分别面临使用者和创建者两种目标群体。达到一相对容易,达到二比较难搞。
|
![]() |
70
dosmlp 2 天前
桌面端 qtquick 基本可以统一了
|
72
justdoit123 2 天前
一直值得深思的话题 。
我妄言,这其中有各平台圈地垄断的原因,也有 web 表现力、性能不足的原因。 |
73
MacsedProtoss 2 天前 via iPhone
pc 的话 其实 electron 不是也挺够用了吗 flutter 勉强也能用吧
现在其实移动端才是真正的头大,受限于性能和功耗的问题,flutter 其实大点的项目就不好用,至于 electron 嘛反正也跑不了 而且现在 iOS26 整的这一波大的,自绘制的应该全部集体升天了 |
![]() |
74
Torpedo 2 天前
@Leon6868 #13 早些年,移动端的 webview 各种兼容性问题。同时移动端手机性能弱,跑 webview 性能瓶颈感受明显。
除了性能,客户端能获得的权限,能力远比 webview 强太多 。 最后,移动端毕竟是热门方向,webview 等多端方案肯定不如各端各自原生开发一遍。热门就可以不考虑成本 |
75
justdoit123 1 天前
@minami 执着于大一统的原因在于现在的 app 开发成本高了。适配不动了。
|
76
dyexlzc 1 天前
拿个跨平台游戏引擎写 app 就行了,人家各个平台包括 ps 都给你支持
问题是有没有这个必要,什么业务场景需要这样,带来的成本收益是多少(如果老板极致要求那就没话说) |
77
nightlight9 1 天前
kotlin multiplatform 怎么样?有人尝试过吗
|
![]() |
78
anivie 1 天前
@Leon6868 #39 它们目前的主要场景是为嵌入式工作的,但是本身没有为嵌入式进行什么特异性设计,是原生多端的
这个框架和 rust 的其它 GUI 都不一样,其它 GUI 是 rust 的 dsl ,这个框架是一门新的语言专门拿来做 UI ,和 rust 本身没有强绑定 |
![]() |
79
bluearc 1 天前
分为移动端和桌面端,不强求一个框架囊括所有,那么还是有解决方案的,比如桌面端的 qt ,移动端 flutter 和 rn
|
![]() |
80
minami 1 天前 via Android
@justdoit123 真大一统了,你的可替代性就拉满了,议价权就跌到底了,别盼着这个
|
![]() |
81
ipwx 1 天前
引擎一样没有解决问题。
手机端的屏幕尺寸、触控方式,和平板的,和网页的用鼠标和键盘的,根本不一样。试图写一套代码跑三端,那只能是三端的用户体验都会打折扣。 当然,外网这种用户体验打折扣的 App 我觉得也挺多的,解决的道路就是干脆 App 变简单、元素少一点。但是国内手机端竞争太激烈了,基本都是用户体验要精确到间距到底多大才舒服。 所以国内 App 不可能写一遍、三端(手机、平板、网页)都能用。因为 App 复杂度摆在这里。无论是不是用同一套技术栈,反正都得单独写。 |
![]() |
82
ipwx 1 天前
我觉得和市场状态也一样。
国外有不少 toB 机会,toC 市场也不像国内 14 亿那么大,没必要在互联网 toC 市场移动端里面打生打死,各有各的活法。大不了做个界面长什么都无所谓的程序呗。国内 toB 根本没啥油水,14 亿市场又辣么大,赢家通吃,所以 UI 还不得卷上天,一个按钮精确到渐变的方向是多少度都要扣半天。 |
![]() |
83
kongcc 1 天前
现在开发 app 就有个问题 安卓、ios 、鸿蒙 🤣
|
84
justdoit123 1 天前
@minami 当然不是我期待着。 但是技术演进,是不以人的意志为转移的。假定真的出现这种技术,我们也拦不住。
|
![]() |
85
lujiaxing 1 天前 ![]() @Leon6868 Avalonia 跟 Cordova 算是两个最接近银弹的方案了. 我不清楚你所谓 "不算真正的通用" 是啥意思, 难道你认为 Avalonia 需要在手机上装 .NET Framework?
|
![]() |
87
Geon97 1 天前
感觉 tauri 有点不太能打,更看好 dioxus
|
![]() |
88
SilentOrFight 1 天前
@Torpedo #74 webview 目前来说加载等待还是太痛苦了,特别是那些银行或者官方活动页,图片没存 cdn 不做加速,高峰期打开一个活动页需要 30s 甚至几分钟,实在是依托答辩。
|
89
WoodsGao 1 天前
@nightlight9 字节这边有用 kmp+cmp ,b 站 app 已经切过去了
|
![]() |
90
Torpedo 1 天前
@SilentOrFight #88 现在的方案就是混合方案。如果 web 化,对标的是 electron 。混合方案的问题是每次创建 webview 必然白屏,体验割裂。
至于 cdn ,客户端没 cdn ,他也加载不出来 |
91
yukafans 1 天前
avalonia 连龙芯和鸿蒙都能跑,哪里不通用了?
|
![]() |
92
Akitora 1 天前
Avalonia + 1
|
![]() |
93
minami 1 天前 via Android
@justdoit123 人性决定了不可能出现这种技术,苹果推 macos26 新设计时会关心 flutter rn avalonia 这些技术的死活吗,应该是巴不得它们死吧
|
![]() |
95
belin520 1 天前
Cordava ???读大学的时候接触的这个词
|
96
robertuestc 1 天前
技术上确实有难度,但其本质问题是操作系统厂商和应用开发者的博弈问题,任何某一阶段能完美跨平台的 GUI 方案都会在历史后面某个阶段失去完美性,当然渐进的 web 除外
|
97
w568w 1 天前 ![]() > Flutter [...] 昙花一现
Flutter 咋就昙花一现了?我观察身边从原生转 Flutter 的人最近几个月越来越多,Flutter 的生态也一直在发展,还有一个比原生语言拟人多得多的中心仓库( pub.dev ),基本啥都能搜到。为什么我看 V 站天天说「 Flutter 已死」? Flutter 到底哪里快死了?哪家媒体说的?(非阴阳怪气,真心请教) |
![]() |
98
abysscong 1 天前
学习一下技术贴
|