Skip to content

【史上最全讲解】如何选择GUI框架?

基本上所有GUI框架都可以归类到如下三个路线中。

(1)基于系统原生控件

这种之前比较常见,例如PC上著名的跨平台C++库wxWidgets、GTK等,Mobile上比较典型的就是React Native了。

  • 优点:体积小、内存占用小,系统原生性能。
  • 缺点:可拓展性差,跨平台表现不一致。

这类的主要特性是使用操作系统提供的原生控件,编译的最终程序体积较小。

内存占用一般也比较小,因为一般使用这个方案的需求中不会有太多动态字体变更、或者大量的图片资源。

因为是操作系统自己实现的控件,系统原生级别的,性能也没什么大问题。

(2)基于CPU/GPU自绘

这种就是对实时性要求比较高的场景需要的,典型的就是游戏中的界面UI了。因为游戏的界面需要每帧刷新,所以一般游戏内都会自己在渲染引擎上封装一套基于OpenGL/Direct3D/Metal的UI框架。还有一种典型应用场景就是类似Photoshop这种图形处理软件,对UI的美观要求比较高的设计软件,需要自己精确控制各种按钮文本样式的。

  • 基于CPU的就是所谓的软渲染,例如在SDL中,就可以却换使用CPU渲染还是GPU渲染。
  • 基于GPU的就是刚才说的游戏UI这种。

特点也显而易见

  • 优点:自绘,极高的拓展性,可以实现任何自己想要的效果。
  • 缺点:需要较好的CPU/GPU硬件,打包体积和运行时内存比较大。

(3)基于Web

基于Web的典型就非Electron莫属了,基于浏览器封装的网页渲染技术,将传统的GUI转成网页中的HTML节点来渲染,让浏览器完成跨平台渲染。本质上还是自绘,只不过自绘是浏览器内部完成的,例如Chrome/Firefox在Windows上的WebGL渲染后端ANGLE。

得益于浏览器的各种成熟技术,基于浏览器开发GUI程序的效率极高,且技术门槛也非常低。

当然,基于Web的路线之所以会火起来,在我看来,最功不可没的是React/Vue等前端框架所带来的前端技术栈的快速发展,以及相应的成熟组件库迅猛发展。

在基于系统原生控件的范畴内,开发人员比本上必须会C/C++等系统编程语言,以及各种操作系统底层API编程技能。在基于CPU/GPU自绘的范畴内,开发人员虽然不需要接触太多操作系统底层的编程知识,但是基本上也是需要C/C++等Native编程语言的,同时或多或少也会涉及计算机图形学相关的内容。这些底层技术在当下的社会发展中,应对高速的项目需求变动就显得很不灵活,所以目前很多项目都是走基于Web这条路线的。

  • 优点:
    • 开发效率高,界面非常好看
    • 近乎完美的跨平台一致性
    • 非高实时性和嵌入式应用几乎是必选。
  • 缺点:
    • 打包体积大、运行时内存占用多。
    • 与操作系统底层相关的拓展稍微不太方便

总结

  • 大部分场景下,基于Web路线几乎就是首选。
    • 语言基本上就是JavaScript了。

多说一点基于Web

在Web路线下,也不只Electron一个选项,Electron后端是基于Nodejs实现的。这部分可以换成Quickjs等mini的JavaScript引擎来实现体积优化。

也可以自己使用CEF参考Electron来封装一套类似框架,没必要绑定到Electron这一条技术栈上。

实战相关

因为对GUI编程非常感兴趣,所以今天我也自己做了个实战项目:剪切板助手。

技术路线就是(2)中的基于GPU绘制,将游戏的UI渲染框架拿来作为通用GUI框架开发非实时类App。

理论上界面的可定制性以及性能都能是T1级别的。大家可以自行体验下,看看体积和性能。

上次更新于: