多端 GUI 真的没有银弹吗

3 天前
 Leon6868

关注多端 GUI 解决方案将近十年了。

十年来,像 RN 、Flutter 这样的自绘 UI 不少,大多都是昙花一现。

当前无论做什么应用,一旦涉及到多端,最终都会回到 Web 技术栈。但是 Web 也没有真正通用的标准。一些美好的规范,像 PWA ,早已做土;反而 Cordava 倒是在不温不火地发展。

唯一能满足『 Write once, run anywhere 』的只有 Electron 等 CEF 框架或者近几年兴起的 Tauri 等 Webview 框架,赋予 Javascript 原生能力,即兼顾开发速度,也有充实的生态。

很好奇,图形界面出现四十多年了,Web 时代也有快二十年了,手机也诞生十五年了,但是为什么 GUI 还没有大一统的解决方案?

GUI 真的没有银弹吗?

9455 次点击
所在节点    程序员
118 条回复
musi
3 天前
PWA 做土了?你正在访问的这个站还是 PWA
Leon6868
3 天前
@musi #1 Safari 已经不支持 PWA 了,这个网站是 PWA 并未使用任何 PWA 的特性,存粹是因为任何网站都可以变成 PWA 。
Removable
3 天前
@Leon6868 咦,我怎么记得 iOS 18 还修复了一些对于 PWA 支持的 bug 呢?比如 17 的时候 pwa 应用有时无法正确地跟随系统切换到夜间模式,到 18 就修复了
BingoXuan
3 天前
因为 GUI 太复杂。GUI 可以分成 retained 和 immediate 模式。Web 以及原生都是 retained 模式。style 和 layout 和 event 等影响渲染因素轮不到开发者控制,只能遵循平台规范。同样的效果要编写的代码又是不一样的。根本没办法复用。immediate 可以让开发者使用同一套逻辑渲染所有平台的效果。但难以实现复杂的动画效果以及每次重新渲染带来的性能损耗和功耗。

此外还有一个最大的难点就是异步处理。主 ui 渲染时候如何和数据线程同步也是非常头痛的问题。不同平台的方案又不一样。尤其是 web ,不光要写前后端代码,还要尽可能避免大数据量交互时候性能问题。
RightHand
3 天前
没有银弹 不说其他的,指针跟触摸就是完全不同的逻辑
shadowyue
3 天前
我觉得现阶段的银弹就是 chrome 套壳,没人打得过
zhanying
3 天前
@shadowyue 确实,本来浏览器就是为了跨平台而生
chiaf
3 天前
@Leon6868 twitter reddit 都支持 pwa 😅

v2ed 之前也支持
hronro
3 天前
RN 可不是自绘,是真正用的系统的原生 UI 。
Leon6868
3 天前
@hronro #9 我记得 RN 好像是系统 UI + yoga ,没有用系统的布局引擎,和自绘没有本质区别
Leon6868
3 天前
@RightHand #5 单指操作下其实并没有多不同,多指也并非必须;最好的例子就是 iOS 26 从良记
jackOff
3 天前
资本家肯定是希望垄断自己的私域生态的,又不可能出现几家互相妥协的场面,估计只有最终赢家把所有平台厂商收购或者干破产才有这种希望了
Leon6868
3 天前
@BingoXuan #4 非常深刻的回答!

retained 和 immediate 是完全不同的设计思路,但是似乎 immediate 能实现的 retained 都能实现,而且从架构上来讲,retained 将 style 、layout 与高层逻辑(业务)代码隔离,应该是更优秀的方法?有 immediate 能实现而 retained 不能实现的吗?

异步是老生常谈的问题了,不过在 retained 模式下,搭配状态机,异步设计其实很自然(也可能是我想得太简单了,望指正);而且其实性能问题算是边界情况,大部分情况下,只要遵循一些基本原则,是很难碰见性能问题的?

但是这还是无法解释,为什么直到现在,都没有一款引擎、一个框架,能够在全端大一统地解决性能、视效问题?

或者说实际上 Webview ( CEF ) 已经能解决 90% 了,但是为什么移动端的大家都在拼命逃离 Webview ,创造像 Flutter 一样的渲染引擎?
Leon6868
3 天前
@chiaf #8 pwa 对于 twitter reddit 来说只是放置在手机桌面的快捷方式+缓存,它们并未使用任何 pwa 的特性(储存?通知?);

PWA 能做的,Web 都能做,Web 不能做的,PWA 几乎也不能做。这就是为什么 PWA 的唯一用途就是快捷方式,甚至部分国内手机系统可能都不支持。
hwdq0012
3 天前
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
liuliuliuliu
3 天前
关注多端 GUI 解决方案将近十年了,有试过 MAUI 和 Avalonia 吗?
mxT52CRuqR6o5
3 天前
@Leon6868 #10 按照我的理解 RN 的 yoga 是把双端各自的布局系统抽象成一个统一的 flex 布局系统,一个 RN 的滚动容器,如果不监听滚动事件,渲染完成后的性能等同于 native
Leon6868
3 天前
@hwdq0012 #15 RN For Windows 只能编译为 Windows APP ,是残废
craftsmanship
3 天前
本来 Web 就是那颗银弹呀 不集中力量继续发展 Web 推动标准化发展和实现 忙着各自圈地称王呢 技术是次要的 利益才是最重要的
Leon6868
3 天前
@liuliuliuliu #16 Avalonia 略有耳闻,但是这是专属于 .net 的玩意,并不算真正的通用

由 Xamarin 而生 MAUI 是微软混乱产品线的牺牲品,没有未来,不如 Flutter

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1142560

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX