2023 年,有什么原生级性能的跨平台 UI 框架?

2023-07-08 09:57:15 +08:00
 w568w

月经问题了,以下贴已读过但是没有找到合适的:

打算开个 Side Project 写着玩。准备趁机学点新东西,满足一下自己的软件洁癖……

对框架的需求主要有:

  1. 至少支持 Windows 、Linux (X11)、macOS 三个主流桌面平台
  2. 尽可能不需要携带体积大的捆绑库(如 CEF );
  3. 内存占用小,启动速度接近原生
  4. 支持丰富的文本排版格式(例如同行内图文混排等)。

已经尝试过但不合适的有:

  1. PWA:内存占用大,需要下载浏览器;
  2. Electron:内存占用大,需要携带近百 MB 的 CEF ;
  3. Tauri:内存占用大,冷启动时空屏时间极长;
  4. ReactNative:内存占用大,冷启动时空屏时间长;
  5. JavaFX / Compose Multiplatform:冷启动速度慢,需要携带 JRE ;
  6. Sciter:对 Linux 的支持基本放弃(声称支持 X11 ,实测官方 Demo 无法正常渲染);
  7. FLTK:Windows 下的中文字体渲染非常糟糕;
  8. OpenGL/Vulkan:这不算 UI 框架吧?

使用的语言无所谓,主流框架的基本多少会一点。

之前有 Flutter 和 Android 的开发经验,所以推荐 Flutter 就免了。这不是想学点新玩意吗😂

24685 次点击
所在节点    程序员
106 条回复
documentzhangx66
2023-07-09 16:18:20 +08:00
@shyangs

建议去了解一下光追的发展史。

计算机从业者要多学历史。
documentzhangx66
2023-07-09 16:21:11 +08:00
@SaltyKitkat

什么最宝贵?时间。

功能全面的框架,必然会浪费大量内存与硬盘存储。比如 VS 这款 IDE ,早起从编码、代码提示、多屏开发、调试、查性能瓶颈等等,ALL IN ONE ,非常方便。但它块头大,启动后也占用很多内存。

内存与硬盘值钱,还是程序员的时间更值钱?
hez2010
2023-07-09 16:30:57 +08:00
@wxf666 我的 tokenizer 没做虚拟化,你粘贴的代码文本是一次性全部进行高亮处理保存在内存里的,而不是只处理显示出来的那些代码。如果你想公平比较的话,建议只贴正好占一个窗口那么多的代码量。
wxf666
2023-07-09 16:35:51 +08:00
@documentzhangx66 #82 那么,那些号称体积小、占用内存小、性能接近原生的框架,发展方向错了?

比如,一个文本编辑器,应该大力宣传:

- 安装包 1GB+,但功能全面
- 内存占用 10GB+,但功能全面
- 运行较慢,但功能全面




另外,以后都 GPT 自动生成代码了,程序员的时间不值钱了

隔壁不是有个说,1 元钱,能自动生成全套包含产品文档、架构设计、代码的完整 repo 了么
wxf666
2023-07-09 17:31:03 +08:00
@hez2010 #83 没有吧。。

vscode 右边的缩略图全部都染色了(刚打开文件,要等几秒钟才染色。之后随便疯狂拖滚动条都没事了)。

Notepad++ 的话,第一次滚动到文件末尾,确实卡了七八秒。但之后就能随便疯狂拖滚动条了。

Notepad--、Notepad Next 、QtCreator ,随便疯狂拖滚动条也没事,甚至还有层次折叠。

如果每次都只处理显示出来的代码,那怎么知道是不是在 /* */ 注释里呢?甚至还知道在哪个层次里,该层次有没有被折叠。。



另外,我发现 Notepad-- 甚至会解析 #ifdef 之类的宏块,未定义的块甚至会暗淡。。

如果在开头写个 #ifdef abcdefg ,结尾写个 #else /* else */ #endif ,那么就只有这四行深色,其他 25W 行都是浅色。。



好吧,所有应用都缓慢拖动滚动条,从顶至底,又回到顶部,反复十次。

尽量确保每一处代码都分析完毕并渲染过后,再测量内存:

| 应用 | 内存(最大化,反复缓慢拖动滚动条至两端十次,再静置至稳定) |
| :-----------------: | :--------------------------------------------------------: |
| Visual Studio Code | 510 MB |
| EditorDemo-Angle | 800 MB |
| EditorDemo-Software | 720 MB |
| Notepad++ | 30 MB |
| Notepad-- | 40 MB |
| Notepad Next | 50 MB |
| QtCreator | 440 MB |

不知为啥,你的内存占用还膨胀了。。

按理说,已经预先缓存所有高亮代码了,后面应该不会再涨内存了?(就像其他 5 个应用一样)
hez2010
2023-07-09 17:48:53 +08:00
@wxf666 估计哪里的内存没释放吧,其实你反复切换语言内存也会一直往上涨不会往下掉,这得跑 memory profiler 才能知道原因,数据结构好好设计一下的话是可以做的内存占用几乎维持刚启动时占用不变的,不过这是个随便写的 demo 无所谓了。
Avalonia 的话有个 80mb 左右的常数内存占用,再往上就看代码的算法和数据结构了,和框架本身关系倒不是很大。
notepad 那俩毕竟是下了大功夫优化了占用的 app 。
wxf666
2023-07-09 18:20:41 +08:00
@hez2010 #86 其实也没太大所谓了。


首先,这几个编辑器里,确实也就 你的 和 vscode 好看些。赏心悦目嘛,自然要付出些代价。

而且,以后内存越来越便宜,多占点少占点也差不太多。

主要是我现在的笔电,内存是焊死的,加不了内存,我才比较在意。以后换电脑后,也就无关紧要了。

另外,这个也是未来的趋势,连微软都用 WebView2 来写一堆自带应用了。。


你的再加点点功能,当个日用编辑器也挺好的:

- 启动比 vscode 快
- 比其他编辑器好看
- 几十万行文本处理也不慢(至少比 Notepad++ 卡七八秒快),占用内存也可接受(几百 MB )

总之,技术也挺厉害的了,写的 demo 差不多也算是成品了
documentzhangx66
2023-07-09 18:23:47 +08:00
@wxf666

发展方向,并没有对错。当初 FC 在被编码时,各种优雅的实现方式,那已经不是编程,而是一件件艺术品。

但是,如果每一个计算机软件项目,都想做成艺术品,那么像 QQ 这种级别的软件,也许等我们老了,也做不出来,因为工程量太大了。

所以,我们应该考虑,根据项目实际需求出发,在经济与时间能够确保项目不失败的前提下,先把需求都实现了,然后再进行体积的压缩、减少内存占用。这样既能保证产业的发展与延续,又能实现你们自己对体积、内存使用量的追求。

最后,GPT 现阶段的确能够做出一些学生级别的作品。但如果你参与过正规大型工程项目,GPT 这种连测试都还要专门去提醒才会去实现,目前阶段是没办法抢了专业程序员的饭碗。不过我相信它未来还是会更强大的,但到了那个阶段,楼主的问题,很可能会发生变化。
yangxin0
2023-07-09 19:15:47 +08:00
我觉得下一个时代一定是 webgpu + h5 + electron
yangxin0
2023-07-09 19:16:17 +08:00
figma 打好了样,webgpu 1.0 才正式到来。
lyping
2023-07-09 20:19:31 +08:00
为什么都不提 QT?
songray
2023-07-09 20:27:36 +08:00
真有这好东西的话, 原生方案早就死绝了.
soap520
2023-07-09 23:12:33 +08:00
godot
SolarHurricane
2023-07-09 23:22:43 +08:00
SDL2 有了解过吗
nine
2023-07-10 00:38:24 +08:00
看到都说 Delphi 要进棺材了,那我就可以放心用了。
chinuno
2023-07-10 08:01:20 +08:00
@w568w 还没见过把 imgui 用在嵌入式上的。文档想说的大概是因为是立即模式的 GUI 所以可以很方便的就集成到游戏里做调试 ui 用。但是除此之外也能用来写单独的 gui 软件,他的 github 页面上就列了不少用 imgui 写的工具
holulu
2023-07-10 08:40:33 +08:00
https://platform.uno/
wildlynx
2023-07-10 08:52:36 +08:00
用 gtk 那些人开发的 Vala 语言开发 GTK 感觉如何?
lanten
2023-07-10 10:44:09 +08:00
目前也没有哪个 ui 描述方案能比 html 更高效,灵活性和开发体验没得说,缺点是开销大。如果你的应用需要常驻内存,但不需要频繁的 gui 交互,tauri 是个不错的选择,浏览器窗口用完即毁,在不打开 webview2 的情况下,主进程内存占用通常不超过 10M
jones2000
2023-07-10 10:44:32 +08:00
能力差就用浏览器套壳 h5 。
能力强的选 c++ 和 object-c, 了解下每个平台的画布接口,基本都差不多 , 找几个开源的, 自己需要什么控件,直接代码拷过来不就可以了, 需要什么就拷什么, 这样编译出来的执行文件小,内存占的也小。

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

https://www.v2ex.com/t/955040

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

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

© 2021 V2EX