为什么选择 Electron
Electron 是一个框架,使开发者能够将 Web 技术(HTML、JavaScript、CSS)、Node.js 及原生代码相结合,构建适用于 macOS、Windows 和 Linux 的跨平台桌面应用程序。 它基于MIT开源许可证,对商业和个人用途均免费。 在本文档中,我们将解释为何 Electron 备受公司和开发者青睐。
我们可以从两个方面来看待 Electron 的优势:首先,为什么要用 Web 技术开发应用? 其次,为什么偏偏要选 Electron?
如果你已经在使用 Web 技术构建应用程序,可以直接跳到下面的 为什么选择 Electron?
部分。
为什么选择 Web 技术
Web 技术包括 HTML、CSS、JavaScript 和 WebAssembly。 它们是现代互联网的基石。 这些技术已成为构建用户界面的最佳选择——无论是对于消费者应用程序还是关键业务型应用程序。 这不仅适用于需要在浏览器中运行的应用程序,也适用于那些无法通过浏览器访问的桌面应用程序。 我们在此大胆断言,这不仅适用于需要在多个操作系统上运行的跨平台应用程序,而且适用于所有类型的应用程序。
例如,美国国家航空航天局 (NASA) 的任务控制中心就是使用 Web 技术编写的。 彭博终端是每个金融机构都能找到的计算机系统,它也是使用 Web 技术编写的,并在 Chromium 中运行。 它的价格是每用户每年 25,000 美元。 为全球大型食品零售商提供支持的麦当劳自助点餐机完全是使用 Chromium 构建的。 SpaceX 的 Dragon 2 太空舱使用 Chromium 来显示其界面。 你可能已经感受到:Web 技术是构建用户界面的绝佳技术栈。
以下是 Electron 维护者们坚定支持 Web 的原因。
多功能性
现代版本的 HTML 和 CSS 能够让开发者和设计师充分表达自己。 Web 技术的应用案例包括 Google Earth、Netflix、Spotify、Gmail、Facebook、Airbnb 或 GitHub。 无论你的应用程序需要什么样的界面,你都可以使用 HTML、CSS 和 JavaScript 来实现。
如果你想专注于打造出色的产品,而无需费力研究如何在特定的 UI 框架中实现设计师的愿景,那么 Web 技术是一个稳妥的选择。
可靠性
Web 技术是全球使用最为广泛的用户界面基础。 它们也因此得到了充分的强化。 从 CPU 到操作系统,现代计算机都经过了优化,可以很好地运行 Web 技术。 用户设备的制造商——无论是 Android 手机还是新款 MacBook——都将确保它们可以访问网站、在 YouTube 上播放视频或显示电子邮件。 相应地,他们也将确保你的应用程序有一个稳定的基础,即使你只有一个用户。
如果你想专注于打造出色的产品,而无需调试以前从未有人发现过的奇怪问题,那么 Web 技术是一个稳妥的选择。
互操作性
无论你需要与哪个服务提供商或客户数据进行交互,他们都可能已经考虑了与 Web 的集成路径。 根据你的技术选择,嵌入 YouTube 视频可能只需 30 秒,也可能需要你聘请一个专门从事流媒体和硬件加速视频解码的团队。 对于 YouTube,使用其提供的播放器之外的任何内容实际上都违反了他们的服务条款,因此你很可能在实现自己的视频流解码器之前先嵌入一个浏览器框架。
如果你使用 Web 技术构建应用程序,则几乎没有平台无法运行。 几乎所有带有显示屏的设备——无论是 ATM 机、车载信息娱乐系统、智能电视、冰箱还是任天堂 Switch——都具备显示 Web 技术的方法。 如果你想实现跨平台,那么 Web 技术是一个稳妥的选择。
普遍性
很容易找到具有 Web 技术开发经验的开发者。 如果你是一名开发者,你将很容易在 Google、Stack Overflow、GitHub 或你所选择的代码 AI 助手上找到问题的答案。 无论你需要解决什么问题,很可能有人已经很好地解决了它——你可以在网上找到解决方案。
如果你想专注于打造出色的产品,并能充分利用各种资源和材料,那么 Web 技术是一个稳妥的选择。
为什么选择 Electron
Electron 将 Chromium、Node.js 和编写自定义原生代码的能力结合到一个框架中,用于构建强大的桌面应用程序。 使用 Electron 的主要原因有三个:
企业级
Electron 可靠、安全、稳定且成熟。 它是众多公司构建其旗舰级产品的首选框架。 我们在主页上列出了一些使用 Electron 的公司,仅在聊天应用中,Slack、Discord 和 Skype 都是使用 Electron 构建的。 在 AI 应用程序中,OpenAI 的 ChatGPT 和 Anthropic 的 Claude 都使用 Electron。 Visual Studio Code、Loom、Canva、Notion、Docker 以及无数其他领先的软件开发商都选择了 Electron。
我们确实将使 Electron 易于使用并为开发者带来愉悦体验作为一项优先事项。 这可能是 Electron 如此受欢迎的主要原因——但保持 Electron 活力和蓬勃发展的是维护者专注于使 Electron 尽可能稳定、安全、高性能,并能够满足最终用户的关键任务型用例。 我们正在构建的 Electron,适用于那些不允许出现无法修复的错误、未修补的安全漏洞和任何类型服务中断的场景。
成熟
据我们目前的估计,全球大多数台式电脑上都运行着至少一个 Electron 应用。 Electron 的发展得益于其维护者团队中的人才优先化,在管理持续维护方面培养了卓越且可持续的工程实践,并主动邀请选择 Electron 的公司直接为该项目做出贡献。 我们是 OpenJS 基金会的一个影响力项目,该基金会本身也是 Linux 基金会的一部分。 我们与 Node.js、ESLint、Webpack 等其他基金会项目,以及 Linux 内核或 Kubernetes 共享资源和专业知识。
对于你这样的开发者,所有这些在实践中意味着什么?
- 可靠的发布时间表:Electron 将与 Chromium 的每个次要版本同步发布一个新的主要版本,通常和 Chromium 在同一天发布。 为了实现这一目标,需要在构建流程、开发工具以及确保每周的实际工时上付出巨大努力。
- 去中心化决策:有时,选择一项技术也需要你选择一个人或一家公司。 相应地,这要求你相信该个人或公司永远不会崩溃、与你直接竞争,或者做出任何其他迫使你重新考虑整个技术栈的剧烈举动。 Electron 由一组不同的公司(Microsoft、Slack/Salesforce、Notion 等)维护,并将继续欢迎更多有兴趣确保其“在决策桌上占有一席之地”的公司。
稳定性、安全性与性能
Electron 通过将最新版本的 Chromium、V8 和 Node.js 直接与应用程序二进制文件打包在一起,在所有目标平台(macOS、Windows、Linux)上提供出色的体验。 在运行和渲染具备极高稳定性、安全性和性能的 Web 内容方面,我们目前认为该技术栈当属同类最佳。
何必打包所有
您可能会疑惑,既然大多数现代操作系统已经自带了浏览器和某种形式的 Web 视图,为什么我们还要将 Chromium 的 Web 堆栈打包进我们的应用程序? 打包不仅会显著增加 Electron 维护者的工作量,还会增加 Electron 应用程序的总体积(大多数应用都大于 100MB)。 许多 Electron 维护者都曾在开发中采用过嵌入式 Web 视图,但后来他们认为,牺牲一定的磁盘空间和维护成本是值得的。
如果使用操作系统内置的 Web 视图,您能使用的浏览器版本将受限于您需要支持的最低操作系统版本。 我们发现此方法存在以下问题:
- 稳定性: 现代 Web 技术栈非常复杂,因此,您迟早会遇到 bug。 如果您使用操作系统的 Web 视图,那么您唯一的解决办法就是让客户升级操作系统。 如果用户的机器无法升级(例如无法升级到最新的 macOS 或 Windows 11),您就不得不要求他们购买新电脑。 假如运气不好,您可能会因此失去一个主要客户,因为他们不可能仅仅为了让某个团队试用您初创公司的应用而升级数千台机器。 遇到这种情况,您将 无计可施 。 对于那些雇佣 Electron 维护者的公司来说,即使出现这种情况的风险也是无法接受的。
- 安全性: 与通过发布应用更新修复稳定性错误类似,您也可以发布安全补丁,而无需让客户升级操作系统。 虽然操作系统供应商会优先更新其内置浏览器,但我们从未发现他们会同样及时地更新内置的 Web 视图。 打包 Web 渲染器可让您(开发者)掌控一切。
- 性能: 对于简单的 HTML 文档,内置 Web 视图有时比捆绑了框架的应用占用资源更少。 但对于更大型的应用,根据我们的经验,最新版本的 Chromium 能提供比内置 Web 视图更好的性能。 您可能认为内置视图能与其他应用和操作系统共享许多资源,但出于安全考虑,应用必须在各自的沙盒中运行,彼此隔离。 这样一来,问题就变成了:操作系统的 Web 视图是否比 Chromium 性能更好? 从众多应用的实践来看,我们的经验是:打包 Chromium 和 Node.js 可以帮助我们打造更出色、性能更卓越的体验。
为什么是 Chromium 和 Node.js
Electron 的首要目标是提供最佳的用户体验,其次是打造同样出色的开发者体验。 Chromium 是目前市面上最好的跨平台渲染技术栈。 Node.js 使用 Chromium 的 V8 JavaScript 引擎,这使得我们可以同时利用两者的优势。
- 按需使用原生代码:得益于 Node.js 成熟的原生插件系统,您可以随时编写原生代码。 任何系统 API 都能为您所用。 无论您想集成何种 macOS、Windows 或 Linux 功能,只要能用 C、C++、Objective-C、Rust 或其他原生语言实现,在 Electron 中皆可实现。 这再次赋予了您(开发者)最大的控制权。 有了 Electron,您可以使用 Web 技术,而不必 局限于 Web 技术。
开发者体验
总而言之,我们的目标是将 Electron 打造成一款成熟的、企业级的、足以胜任关键业务应用的开发框架。 我们始终将可靠性、稳定性、安全性和性能放在首位。 当然,出色的开发者体验或许也是您选择 Electron 的理由:
- 强大的生态系统: Electron 可运行所有 npm 模块。 任何关于 Node.js 的资源都适用于 Electron。 此外,Electron 自身也拥有一个蓬勃发展的生态,涵盖安装程序、更新程序、深度操作系统集成等众多功能。
- 丰富的内置功能: 过去十年,Electron 的核心已经集成了大量原生功能,以满足您构建应用的需求。 Electron 使用 C++ 和 Objective-C 编写,提供了数十个简单易用的 API,可实现更深层次的操作系统集成,例如:为透明或异形窗口小部件进行高级窗口定制、从 Apple 推送通知网络(APNs)接收推送通知,或为您的应用定制 URL 协议处理程序。
- 开源: 整个技术栈完全开源,您可以任意审查。 这确保了您可以自由地添加任何功能,或修复今后可能遇到的任何错误。
- 按需使用本机代码: 再次强调,Electron 允许您混合使用 Web 技术和 C++、C、Objective-C、Rust 等原生语言。 无论是使用 SQLite、整个大型语言模型 ,还是仅仅调用某个特定的原生 API,Electron 都能轻松胜任。
为什么选择其他方案
如上所述,Web 无疑是构建用户界面的绝佳平台。 但这并不意味着我们这些框架维护者会用 HTML 和 CSS 搞定 一切 。 以下这些场景便值得特别注意:
资源受限的环境和物联网: 在内存或算力极为有限的场景中(例如,在低功耗 ARM Cortex-M 芯片上仅有 1MB 内存和 100MHz 的主频),您可能需要使用底层语言直接与显示器交互,以输出基本的文本和图像。 即便是在性能稍强的单芯片设备上,您或许也得考虑使用嵌入式 UI 框架。 智能手表便是一个典型的例子。
严格控制磁盘占用: 打包后的 Electron 应用通常约为 80 至 100MB。 如果对磁盘占用有严格的要求,您就不得不另寻他途了。
操作系统 UI 框架和库: Electron 允许编写原生代码,因此原生应用能做到的,Electron 也能做到,包括使用 WinUI、SwiftUI 或 AppKit 等系统 UI 组件。 但在实践中,大多数 Electron 应用很少使用此功能。 如果您希望应用的主体由操作系统提供的界面组件构建,那么为每个目标操作系统开发完全原生的应用可能是更好的选择。 这并非 Electron 无法胜任,而是开发纯原生应用通常会更加轻松。
游戏和实时图形: 如果您正在开发需要复杂实时 3D 图形的高性能游戏或应用,Unity、虚幻引擎、DirectX/OpenGL 等原生框架可以提供更出色的性能,并能更直接地访问图形硬件。 Web 技术爱好者可能会提出一些需要说明的情况,例如虚幻引擎也集成了 Chromium,或者 WebGPU 和 WebGL 正在快速发展,许多游戏引擎 (包括此处列出的引擎) 现在都支持将其游戏输出为可在浏览器中运行的格式。 尽管如此,如果让我们开发下一款 3A 大作,我们可能会选择 Web 技术以外的方案。
嵌入轻量级网站: Electron 应用通常以 Web 应用为主,只在必要时嵌入一些原生代码。 计算密集型的 Electron 应用往往采用 HTML/CSS 编写 UI,而用 Rust、C++ 或其他原生语言构建后端。 如果您计划构建一款原生应用,并且希望在特定视图中嵌入一个小型网站,那么使用操作系统提供的 Web 视图或类似 Ultralight 的轻量级方案可能是更好的选择。