Electron:方便是好,但代价你可能真没想到
那些年我们用过的 Electron 应用:为什么它们总是差点意思?
说句实在话,不知道你有没有这种感觉——下了一个桌面软件,用起来总觉得哪里不对劲。
功能都有,勉强能用,但就是不得劲。文字小得眯眼看,窗口行为跟别的软件不太一样,内存更是吃得飞起。
恭喜,你大概率装了个 Electron 应用。
什么是 Electron?
简单说,Electron 是个框架,让开发者用网页那套技术——HTML、CSS、JavaScript——来写桌面软件。
听起来很美对吧?前端程序员不用学 Windows、macOS、Linux 的原生开发,一套代码全搞定。资源有限的创业团队简直狂喜。
但问题是——
宣传材料不会告诉你的那些事,全在这儿了。
"披着外套的浏览器"
有个开发者形容得好:Electron 应用就是"穿着风衣假装是本地软件的浏览器"。
这话一点都不冤枉它。
你的桌面应用里,实际上跑着一整个 Chromium 浏览器实例。完整的 JavaScript 引擎,完整的渲染引擎,所有开销一个不落。
于是你就会看到这种名场面:
- 一个邮箱客户端,占的内存比大型游戏还多
- 一个笔记软件,打开要三秒钟
- 标榜"轻量"的小工具,后台跑着跟挖矿似的
网页版居然更好用?
最让人无语的来了。
很多应用,网页版反而比桌面版更流畅。
同样的代码,同样的功能,浏览器里打开就是更跟手、反应更快、哪儿哪儿都更顺。
凭啥?
因为浏览器这二十年一直在被疯狂优化。各家浏览器厂商卷性能卷得飞起。系统更新的时候,网页渲染组件会自动跟上安全补丁。
但 Electron 应用呢?它自带的 Chromium 版本是打包进去的,冻结在那个时间点。除非开发者想起来更新——还不一定啥时候——不然就一直是那个版本。
这不是在吓唬人。安全研究人员已经记录过不少案例,Electron 应用里带的 Chromium 组件有已知漏洞,就这么上线了。
你正在用来看这篇文章的浏览器?可能你已经刷新了三次了。
你桌面上的那个 Electron 软件?可能还在跑两年前的代码。
用起来有多别扭?
聊聊使用体验。
用原生 macOS 或 Windows 软件,你会理所当然地期待一些操作:Command+滚轮缩放文字、窗口拖拽调整大小、快捷键和其他软件保持一致。
Electron 应用经常打破这些期待。不是开发者不上心,很多开发者其实很用心。但 Electron 这个框架天生就不是为模仿原生体验设计的。
这就好比让鱼爬树,然后纳闷它怎么这么累。
我都不记得有多少次了,在 Electron 应用里调字号,调了半天不知道改没改成功,反复去预览确认。在网页上?Control+加号就搞定了,或者直接两指捏触控板。但这种"高级功能",某些桌面软件表示理解不了。
WebView:没人满意的折中方案
那有没有别的办法?
有些开发者转而用 WebView——这是系统级别的组件,用系统自带的渲染引擎来显示网页内容。比 Electron 效率高,因为网页引擎是系统共用的,安全更新跟着系统走。
但 WebView 也有自己的麻烦。
不同操作系统用的网页引擎不一样。你的软件在 Windows 上和 macOS 上看起来可能有点差别。"写一次,到处运行"这个承诺,开始出现裂痕。
说句真心话:没有完美的解决方案。
原生应用性能和体验最好,但得为每个平台写一套代码。Electron 开发方便,但牺牲资源占用和安全。WebView 嘛,两边各占一点,两边都不太舒服。
那该怎么办?
如果你是开发者,在做桌面软件之前,真的好好想想 Electron 适不适合你。替用户想一想。想一想有人可能会在网上发帖说你的软件是"穿着风衣的浏览器"。想一想"在我这儿能跑"这句话,当你打包了一整个浏览器进去的时候,有了完全不同的分量。
如果你是用户,别因为抱怨那个卡成狗的 Electron 应用而不好意思。你的糟心是合理的。内存占用大、界面不统一、文字小得看不清——这些不是小毛病,是实实在在影响你干活效率的事,值得被解决。
说到底,我们应该做的是既尊重开发者,也尊重用户的工具。
有时候选方便的,有时候得多下功夫把事做对。
问题不在于 Electron 好不好,而在于它适不适合你想做的事。
那个"穿风衣"的比喻之所以传得开,是因为它说到了点子上——本质上是伪装。
Electron 应用经常给人一种在假装是什么的感觉。
也许,是时候停止伪装,做一个清楚自己是什么的软件了。