多端 GUI 真的没有银弹吗

4 天前
 Leon6868

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

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

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

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

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

GUI 真的没有银弹吗?

9791 次点击
所在节点    程序员
118 条回复
Leon6868
4 天前
@shui14 #40 笑死,我完全同意 Flutter 将成为 RN 的实现,谷歌用 Dart 存粹是因为 v8 没时间鸟 Flutter
Leon6868
4 天前
@shui14 #40 你提到的 react-skia ,我在 github 没找到,请问有链接吗?
kenvix
4 天前
@fors #28 如何在 Android 和 ios 上使用 swing
ragnaroks
4 天前
可以接受重复渲染损耗的话,unity3d unreal 这些游戏引擎就是真正的跨平台 GUI
Leon6868
4 天前
@ragnaroks #44 非常错误,U3D 自己的 2D GUI 语言都没整明白呢
BingoXuan
4 天前
@Leon6868
retained 可以抽象和提高复用,但就没办法多端复用了。比如 web 的 flex 布局在 swiftui 难以实现。immediate 可以实现任何效果,涉及渲染的状态改变最后又变成了 retained 类似的东西。比如用 immediate 实现组件的销毁动画就必须实现 retained 状态机。所以针对不同使用场景,两者哪个更适合而已。

大部分情况下性能还是够的,但异步是需要配合各自 retained gui 框架的。swiftui 的 task ,web 的 promise ,qt 的 slot&signal 都是实现异步的机制。如果你说要大一统解决方案,那就只有 rxswift ,rxjs ,rxcpp 的 rx 框架。

一方面 web 标准过于庞大了,但又非常零散。时到今日,前端面试问题还会问如何居中。另一方面,js 不是系统级语言。因此需要编写后端桥接。中间需要做了很多额外工作。
BeiChuanAlex
4 天前
今年的 ios26 发布,flutter 估计也要进行坟墓了。。。。。。
wanmyome
4 天前
qt/lazarus/wxwidgets 有推荐的吗
feikaras
3 天前
无银弹。这世界没魔法。就连 native gui 都不看重效率的今天,那么多人对 win11 ui 无反应的今天,这话题早就过期了。
treblex
3 天前
有没有人试过 godot ,他的 ui 主题还是挺适合做 app ,也能降低刷新率来适应 app 模式
https://popcar.bearblog.dev/using-godot-for-gui-app-development/
craftsmanship
3 天前
@Leon6868 GUI 技术里还有比 Web 历史更久 标准更完善 跨平台更多 应用更广泛的吗?如果说 Web 还叫束手束脚 那其他家的技术局限性更强 更不完善 怎么偏要用其他呢?所以还是那个观点 技术无关 利益至上
craftsmanship
3 天前
@Leon6868 另外如果连 Web 都搞不定 我不相信还会有其他哪家的技术能搞定 各大厂商联合起来推了这么多年的技术都搞不定 仅靠其中某一家想一统江湖简直是痴人说梦 如果大家非要另起炉灶再联合起来推个新的 那一定是得有划时代的 比现有的更先进的人机交互界面 Web 完全满足不了 才有可能
fors
3 天前
@kenvix #43 这个只能用 compose-jb 了也就是 kmp
shui14
3 天前
@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 讲究设计风格,而不是技术绑定
villivateur
3 天前
不考虑开发者的精神状态的话,其实 Qt 已经算很好了。
hingle
3 天前
Flutter 都用没什么生态的 Dart 了,Avalonia 用 .NET 怎么就不通用了?
charlie21
3 天前
slint 的新解决方案看了一下,感觉它发展到最后可能就像 flutter ,或者说 flutter (dart 写 UI, dart 写界面逻辑) 就像 slint 的一个变种 只不过都限于 dart 而已
charlie21
3 天前
像 VScode 编辑器和 Slack 这种多端聊天软件, 支持 win mac web 多端,如果你的需求也是表单(不涉及高性能渲染),那么它们用的是 Electron 框架
menglizhi2333
3 天前
GUI 跨端银弹一直都有啊,2d/3d 渲染引擎, 就能帮助你直接在各个终端得到非常非常接近的体验参考:游戏和模拟器

但如果要做跨端软件的话,就不存储银弹,因为各个操作系统都存在各种各样的差异,简单举例:文件存储方式,软件安装,系统 API 调用 等等,目前能将这些都整合好,且不会出问题的平台,只有浏览器或者说 Web 平台( PS: 这也是历史的结果),所以软件会选择用 electron ,Tauri 等 web 封装方案,也是因为 Web API 能提供所需功能,如果 Web API 不能满足软件需求,最终还是得要回落到原生开发的
alleluya
3 天前
@hwdq0012 #15 我记得前几年有所谓的 RN 的三端同构 是指的基于 ms 的这个库么?

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

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

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

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

© 2021 V2EX