应用汇开源思考长篇分享

Electron 入侵:Linux 桌面应用开发的无奈

很长一段时间之内,在 Linux 上开发桌面应用似乎就只有两种选择:C++ 的 Qt 或者是 C 的 GTK+,两者都有着各自的拥趸和核心软件,例如 KDE 和 Gnome。然而,随着 Electron 的强势入侵,这一平分秋色的局势大有被打破的局势,但这对我们终端用户而言,真的是一件好事吗?

愤怒的用户

笔者在之前的文章里介绍过最近发布的新版 Linux QQ,相比之前基础功能都残缺不全的旧版 Linux QQ 而言,它自然是一次体验上的飞跃,然而它也有一个致命的缺点不得不提——它是用 Electron 框架开发的,自然,这意味着巨大的内存占用,笔者使用的电脑配备了 16 GB 的内存,因此对这一点感触倒不是很深,然而对于那些内存比较吃紧的 Linux 用户来说,本来他们绞尽脑汁让内核+桌面环境的内存占用压缩到 500 MB 以下,然而只消打开一个 QQ,占用的内存就比整个系统还要多——这几乎是无法接受的。

Chrome 在早年几乎是速度的代名词,它一经推出就以摧枯拉朽的速度取代了 IE,成为了浏览器行业的霸主,然而,自从它成为了这一领域无可置疑的王者之后,它的风评却反而急转直下,如今,提起 Chrome,比起速度人们最先想起来的,是它堪称离谱的内存占用,这甚至成为了某种流行文化符号,网络上关于 Chrome 吞噬内存的梗图也是层出不穷:

自然,基于 Chromium 和 Node.js 的 Electron 天生就不可能省内存,除了夸张的内存占用,这些软件相比原生软件的磁盘占用也要多得多:想想也不难理解,相当于每个软件里面都附带了一个 Chrome 浏览器嘛——还要再加上数量相当夸张的 npm 库,体积怎么也小不下来。再者,相比与操作系统提供的 UI 渲染框架,基于浏览器和前端技术的界面也会耗费更多的资源,对低配用户十分不友好。

由于 Electron 的这些问题,用户们对它的“喜爱”也是溢于言表,甚至有人专门做了一个软件用于检测系统内安装了多少个 Electron 应用,讽刺的是,这个检测器本身也是用 Electron 框架编写的,不过需要说明的一点是,这里的 CEF 应用指的是所有使用 libCEF 库的应用(即使用 Chrome 内核),并不一定是 Electron 应用。

跨平台不易

那么,既然 Electron 有着这样那样的缺陷,为什么用它开发的应用却越来越多呢?是他们想故意恶心用户吗?实际上,开发者们使用它,比起主动选择,更多的是出于实在没得选的无奈。

在 Electron 横空出世之前,要给各个操作系统开发跨平台的桌面应用是非常困难的一件事,每个系统都拥有自己专属的开发框架,Windows 有 WPF 和 MFC,Mac 有 Cocoa,而 Linux 则是 GTK+,看到这里,有的读者可能会说,Qt 呢?人家可是正经的跨平台框架吧?不过如果你真的用它开发过跨平台程序应该就会明白,Qt 虽然具备理论上的跨平台能力,但想让它无缝对接各个系统却十分困难,基本上都离不开大量的修改,更遑论有不少实现只能兼容某个特定的平台,放到别的平台上就成了一团糟了:在这些无奈的现实下,浏览器似乎成为了唯一的解决方案,毕竟这是少数几个可以做到跨平台统一 API 的东西,将其本地化的尝试最终催生了 Node.js 和 Electron。

在 VSCode 上编写的 Node.js 项目

倘若我们抛开技术和程序员的个体视角,从整个行业上来看,要找到一群熟悉以上所有这些框架的员工,对企业来说显然不太现实。而维护数个独立的开发团队的代价则过于高昂,这种情况导致了许多公司干脆选择放弃用户群较少的平台,或者是花式摆烂仰卧起坐———就像之前的 Linux QQ 那样,而 Electron 的出现恰恰填补了这一空缺:只有前端开发能力的程序员也可以开发跨平台桌面程序了,这就大大降低了跨平台所需的人力成本;同时,依靠其优秀的平台独立性,也可以在最大程度上保障各个平台的体验相对一致,实际上,最近的 Linux 软件生态的改善,有相当大的增量就是 Electron 带来的,许多人对此喜忧参半,喜的是 Linux 桌面生态这么多年死气沉沉,终于有了长足的进步;忧的是 Electron 软件资源占用夸张,会不会导致 Linux 用户原本引以为傲的效率沦为空谈?

不过在笔者看来,Electron 也并非如此十恶不赦,性能方面也并非无可救药。例如微软使用 TypeScript 编写并优化的 VSCode 就在各个平台都展示出了相当优秀的性能,获得了程序员们的广泛好评。事实上,所有框架都有不少编写水平低下,资源浪费严重的应用,诚然,基于浏览器的 Electron 有它的原罪,但 VSCode 也证明了它的潜力。况且借助前端技术的帮助,不需要费多大的力气就能开发出界面十分美观的应用,而使用传统框架实现同样的效果却往往要花费数倍的经历,效果却往往差强人意。它较低的入门成本也是优势之一,前端开发者们可以较为轻松的上手,对于桌面程序稀缺的 Linux 来说,这无疑是一个好消息。

随着越来越多的基于 Electron 编写的程序出现在 Linux 平台上,或许它在数量和功能性上的长处能弥补它在效率和占用上的不足,至于这一趋势能否持续,它能否最终赢得用户们的芳心,就让我们拭目以待吧。

参考文章及仓库:
https://github.com/ShirasawaSama/CefDetectorX

对这篇文章感觉如何?

太棒了
7
不错
2
爱死了
1
不太好
0
感觉很糟
0

You may also like

Leave a reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

More in:应用汇

应用汇

使用这个扩展将GNOME转换为灰度

想在睡前减少屏幕时间吗?介绍GNOME Bedtime Mode——一款创新的扩展,可将您的GNOME工作区转换为灰度,提供更轻松的体验。 您是否经常发现在睡觉前放下设备很有挑战性?好消息是,有一个有 […]