方案

Electron

在客户端程序里面加入 webkit 做为引擎渲染存在本地 web 页面。使用这种解决方案典型的项目有 Atom, Github Desktop, Slack, visualstudio. 这些都是大公司的做出来的成果,目前看起来 Electron 是解决 GUI 跨平台很流行的方案,这得益于于 V8 的高性能,也和 nodejs 社区发展得如火如荼离不开关系。nodejs 几乎快变成了适用于任意地方万金油一样的编程语言。可是在客户端潜入一个 webkit 无论如何都会非常笨重,也难以做到轻量。你可能写一个简单的 hello world 弹窗最后打包的程序都需要 100M。 Electron 不适合轻量级的程序,也不是一个长期的 GUI 解决方案。它只适用于你只想做出一个凑合可用的跨平台应用。 Electron 应用更像是简单的把 HTML/CSS/JS 搬到一个不需要输入网址的浏览器里面。

React Native Desktop

Qt 在不同的平台上面把 GUI 直接画出来。Qt 发展了这么多年,一直处于非常冷清的状态,也很少见着一些大型的客户端是用 Qt 做出来的。Qt 也非常庞大,并不比基于 webkit 的 Electron 轻量。C++ 的使用和学习成本都非常高,做界面一致性远远也不如 web。除非不得已,现在几乎不会用 Qt 做为跨平台 GUI 的解决方案。C++ 自身跨平台代价也非常高。

Electrino

Electron的优化版,使用系统的浏览器引擎,大大降低了打包后应用的体积。然目前不支持Windows。有人相信总有一天会取代Electron,可惜遗憾的时该项目GitHub已经一年多没有更新了。。。

Proton-Native

用React的思路封装了libui-node,底层的能力就是libui,不过目前不太成熟,实现商业化项目比较费劲。

React-Native

是的,你没看错。react-native-macosreact-native-windows这俩库扩展了React-Naitve,使得你可以开发macOS和Windows相对完美的Native应用,目前来讲就他合适了。

资料

http://www.leyafo.com/post/2017-07-18-cross-platform-gui-solution-2017/
https://josephg.com/blog/electron-is-flash-for-the-desktop/
https://github.com/atom/atom/issues/14199
https://www.zhihu.com/question/267324734