跨平台UI框架的魔咒
## 背景
前两年一直很热衷于跨平台UI框架,时至今日,明白了一些事情,特此分享。
有哪些?
仅作简单介绍,想要详细了解去官网就是了。
web核心
以前端框架或者编写逻辑来使用的框架。
Electron
https://github.com/electron/electron
企业级跨端方案,体积庞大,深受用户诟病。
成本低且兼容性强。Electron有个很大的优势就是自带开发者工具,调试非常方便。
在linux可用的GUI程序中,一般不是QT就是Electron。
之所以不讲Qt是因为不太喜欢cpp,也不了解qt。
Tauri
Rust语言生态中最流行的GUI框架。
https://tauri.app/
前端就是Electron那一套,系统交互使用rust语言。
由于使用系统自带webview,因此兼容性很差,有些软件甚至给出了内置webview的版本来解决这种问题。
lynx
字节跳动开源框架,不太了解,只知道出来没多久。
https://lynxjs.org/zh/
react native
https://reactnative.dev
使用react的移动端跨端框架。不喜欢react,不了解。
其他
Flutter
https://flutter.dev/
背靠google,主攻移动端,桌面端较为拉胯。
生态尚可。
嵌套语法让人有些难以忍受,由于代码编写失误导致的崩溃可能性远高于Web那一套。
值得注意的是,在windows平台上,tauri和flutter都不支持win7。
Avalonia
主打桌面端,.net生态推出的跨端框架,WPF的那一套XAML语法,比较劝退。
在热度方面较低。
https://www.zhihu.com/question/448782194
由于windows原生程序使用WPF构建,和Avalonia的技术路线基本是一样的,而且跨平台性能方面,可以和qt媲美,因此很多人对此评价很高。
.net生态还推出过MAUI,主打移动端,对linux适配不太行。
https://dotnet.microsoft.com/en-us/apps/maui
小程序
小程序也要考虑跨平台的原因纯粹是微信太捞了。
uniapp
主攻小程序,由于其强推的hbuilderX太恶心,让我足以忽略其优点。
Taro
主攻小程序,从react生态起家,后期才支持vue写法。
我的观点
学一个东西,首先要搞清楚目的。
跨平台是必须的吗?
其实看到上面的描述,其实你应该注意到了,很多框架都主打移动端或者桌面端,而非精通。
一个非常重要的原因是,都兼容工作量也太大了。
另一个很重要的原因就是,桌面端和移动端通常逻辑是不一样的。
比如左右tab,桌面上通常是点击切换,而移动端会加一个滑动切换。
桌面端拖动文件到窗口很正常,而移动端不行。
- 操作逻辑不同
- 界面也应该有所不同
之所以提出上面这种问题,就是为了说明,移动端和桌面端需要两套代码。
那么问题显而易见,假如你的目标用户只是安卓和windows,你根本没必要使用跨平台UI,用了反而有额外的坑。
开发成本
web那一套在构建UI界面中拥有绝对的优势。web发展这么久,网页的总数比应用程序不知道多了多少,几乎在UI构建的任何方面都有成熟的解决方案。而且很多框架的开发者工具都无法与浏览器的开发者工具相提并论。我觉得这很大程度上也是使用web构建跨平台UI框架层出不穷的原因。
出于这个原因,某些应用程序即使不搞多平台,也喜欢用这些跨平台UI框架。
最好的情况就是用web的技术,同时能够拥有接近原生的性能体验。(当然是不可能的,既要又要)
个人偏向
如果理性地考虑,所有程序我都会使用web技术栈。
然而,我还是想要更好的性能,因此移动端我使用flutter或者原生,桌面端在考虑用原生wpf或者Avalonia。
TUI
终端中的UI页面。
TUI也是一种跨平台,go、python、js、rust都有相关的库,不必多说。
前端的很多脚手架工具都是TUI方式来进行交互。


浙公网安备 33010602011771号