Electron 框架与现代应用
Source: Dev.to
什么是 Electron?
如果你不熟悉 Electron,它是一个使用 Web 应用来构建原生应用的框架/打包工具。它还使用本地的 Node.js 后端,允许你在前后端都使用 JavaScript。这听起来很棒,直到你仔细分析最终的产物。
Electron 因其内存和磁盘空间需求而闻名——即使是非 Electron 的、仍然使用 Web 代码的应用也显得异常臃肿。这是因为它捆绑了整个 Chromium 实例。它运行的是无头版本,但仍包含完整的浏览器。Chromium 还提供了一个名为 CEF(Chromium Embedded Framework)的嵌入式框架,但 Electron 与其并不相同。
那么,它为何如此流行?
Electron 对团队更友好。
原生代码往往需要大量工作,在团队环境中即使一次小小的失误也可能导致噩梦。Web 代码在团队协作中要容易得多,尤其是对公司而言,并且兼容众多前端框架。你甚至可以让后端开发者参与 Node.js 那一侧的工作。
然而,使用 Electron 会给用户带来巨大的成本。虽然看起来可能不是这样,但大约 90 % 的用户并没有使用高性能的电脑,且约有 25–30 % 的用户内存不超过 4 GB。
我的个人看法
开发者制作应用是为了服务用户,但现代框架(如 Electron)往往似乎先服务于开发者。如果你忘记了自己是为用户而不是为自己服务,那么你 不是 开发者。
我并不想冒犯任何使用 Electron 的人,但只要有可能,原生方案始终是更好的选择。如果你想要基于 Web 的前端,还有许多替代方案。
Electron 替代方案
Tauri
Tauri 是一个 Rust 框架,使用系统自带的原生 Web 引擎(Windows 上的 WebView2、macOS 上的 Safari、以及大多数 Linux 发行版上的 Gecko)来渲染基于 Web 的 UI。后端使用 Rust,而前端保持轻量,从而让你对应用的生命周期拥有更多控制。
体积对比(最小应用):
- Tauri: < 5 MB
- Electron: 200 + MB
Flutter
Flutter 是一个 UI 工具包,让你使用 Dart 编写应用,并可编译到移动端、桌面端和 Web(尽管对于以桌面为主的项目,一般不推荐使用 Web 目标)。在桌面构建中,Dart 会被编译成本地代码并与 Flutter 的渲染引擎链接,生成的二进制文件可与原生 C++ 应用相媲美。
体积对比(最小应用):
- Flutter: 20–30 MB
- Electron: 200 + MB
结论
对于重视跨平台单一代码库的团队来说,Electron 合理且有意义,但像 Tauri 和 Flutter 这样的替代方案可以通过提供更小、更高效的二进制文件,更好地服务终端用户。
如果你在 25 号阅读此文,圣诞快乐。