跳到主要内容

为何选择 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 的龙飞船 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、汽车信息娱乐系统、智能电视、冰箱还是 Nintendo Switch——都配备了显示 Web 技术的手段。如果您想实现跨平台,Web 是一个安全的选择。

普遍性

很容易找到具有 Web 技术构建经验的开发者。如果您是一名开发者,那么在 Google、Stack Overflow、GitHub 或您选择的编码 AI 上找到您问题的答案将很容易。无论您需要解决什么问题,很可能有人以前就很好地解决了它——并且您可以在网上找到谜题的答案。

如果您想专注于构建一个可以充分利用资源和材料的优秀产品,那么 Web 是一个安全的选择。

为何选择 Electron

Electron 将 Chromium、Node.js 和编写自定义原生代码的能力结合到一个框架中,用于构建强大的桌面应用程序。使用 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 基金会的一个影响项目,而 OpenJS 基金会本身是 Linux 基金会的一部分。我们与 Node.js、ESLint、Webpack 等其他基金会项目——或 Linux Kernel 或 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 技术栈非常复杂,因此,您迟早会遇到错误。如果您使用操作系统的 Web 视图,您唯一的补救措施是要求您的客户升级他们的操作系统。如果该机器无法升级(因为无法升级到最新的 macOS 或 Windows 11),您将不得不要求他们购买一台新计算机。如果您运气不好,您现在可能会失去一个主要客户,因为他们不会仅仅因为一个团队想要试用您的初创公司的应用程序而升级他们整个数千台机器的机队。在这种情况下,您无能为力。即使发生这种情况的风险对于雇用 Electron 维护者的公司来说也是不可接受的。
  • 安全性: 与您可以通过发布应用程序更新来修复稳定性错误的方式类似,您也可以发布应用程序的安全修复程序,而无需要求您的客户升级他们的操作系统。即使操作系统提供商优先更新其内置浏览器,我们也没有看到他们以类似的紧迫性可靠地更新内置 Web 视图。捆绑 Web 渲染器使您(开发者)能够掌控一切。
  • 性能: 对于简单的 HTML 文档,内置 Web 视图有时会比带有捆绑框架的应用程序使用更少的资源。对于更大的应用程序,我们的经验是,与内置 Web 视图相比,我们可以使用最新版本的 Chromium 提供更好的性能。您可能会认为内置视图可以与其他应用程序和操作系统共享大量资源——但出于安全原因,应用程序必须在自己的沙箱中运行,彼此隔离。在这一点上,问题是操作系统的 Web 视图是否比 Chromium 性能更高。在许多应用程序中,我们的经验是,捆绑 Chromium 和 Node.js 使我们能够构建更好、性能更高的体验。

为什么要捆绑 Chromium 和 Node.js

Electron 旨在使其支持的应用程序能够提供最佳的用户体验,其次是最佳的开发者体验。Chromium 目前是可用的最佳跨平台渲染栈。Node.js 使用 Chromium 的 JavaScript 引擎 V8,使我们能够结合两者的力量。

  • 在您需要时使用原生代码:得益于 Node.js 成熟的原生插件系统,您可以随时编写原生代码。没有任何系统 API 是您无法触及的。无论您想要集成什么 macOS、Windows 或 Linux 功能——只要您可以用 C、C++、Objective-C、Rust 或另一种原生语言来完成,您就可以在 Electron 中完成。同样,这给了您(开发者)最大的控制权。使用 Electron,您可以使用 Web 技术,而无需选择 Web 技术。

开发者体验

总而言之,我们的目标是构建一个成熟、企业级且为关键任务应用程序做好准备的 Electron。我们优先考虑可靠性、稳定性、安全性和性能。也就是说,您也可以因其开发者体验而选择 Electron

  • 强大的生态系统:您在 npm 上找到的任何东西都将在 Electron 内部运行。您可获得的任何关于如何使用 Node.js 的资源也适用于 Electron。此外,Electron 本身也拥有 蓬勃发展的生态系统 ——包括大量用于安装程序、更新程序、更深层次的操作系统集成等的选择。
  • 大量内置功能: 在过去的十年中,Electron 的核心获得了大量您可能需要构建应用程序的原生功能。Electron 使用 C++ 和 Objective-C 编写,拥有 数十个易于使用的 API,用于更深层次的操作系统集成 ——例如用于透明或异形小部件的高级窗口自定义、接收来自 Apple 推送通知网络的推送通知,或处理您的应用程序的自定义 URL 协议。
  • 开源:整个技术栈都是开源的,并且对您的检查开放。这确保了您将来可以自由添加任何功能或修复您可能遇到的任何错误。
  • 在您需要时使用原生代码: 值得重申的是,Electron 允许您混合和匹配 Web 技术以及 C++、C、Objective-C、Rust 和其他原生语言。无论是 SQLite、整个 LLM,还是仅仅是调用一个特定的原生 API 的能力,Electron 都会使其变得容易。

为何选择其他方案

如上所述,Web 是构建界面的绝佳平台。但这并不意味着我们维护者会使用 HTML 和 CSS 构建所有东西。以下是一些值得注意的例外情况

资源受限的环境和物联网: 在内存或处理能力非常有限的情况下(例如,在低功耗 ARM Cortex-M 上只有 1 兆字节的内存和 100MHz 的处理能力),您可能需要使用低级语言直接与显示器对话以输出基本文本和图像。即使在功率稍高的单芯片设备上,您也可能需要考虑嵌入式 UI 框架。一个经典的例子是智能手表。

小磁盘占用空间:压缩后的 Electron 应用程序通常约为 80 到 100 兆字节。如果较小的磁盘占用空间是硬性要求,您将不得不使用其他方案。

操作系统 UI 框架和库:通过允许您编写原生代码,Electron 可以完成原生应用程序可以完成的任何事情,包括使用操作系统的 UI 组件,如 WinUI、SwiftUI 或 AppKit。实际上,大多数 Electron 应用程序很少使用这种能力。如果您希望您的大部分应用程序都使用操作系统提供的界面组件构建,那么您最好为要定位的每个操作系统构建完全原生的应用程序。并非使用 Electron 不可能,只是这可能会是一个总体上更简单的开发过程。

游戏和实时图形: 如果您正在构建需要复杂实时 3D 图形的高性能游戏或应用程序,则原生框架(如 Unity、Unreal Engine 或 DirectX/OpenGL)将提供更好的性能和更直接地访问图形硬件。Web 爱好者可能会指出一些注意事项,例如,即使 Unreal Engine 也附带 Chromium——或者 WebGPU 和 WebGL 正在快速发展,并且许多游戏引擎(包括此处列出的引擎)现在可以以在浏览器中运行的格式输出其游戏。也就是说,如果您要求我们构建下一个 AAA 游戏,我们可能会使用 Web 技术以外的其他技术。

嵌入轻量级网站:Electron 应用程序通常主要是 Web 应用程序,并在有用的地方 sprinkled in 原生代码。处理密集型 Electron 应用程序倾向于在 HTML/CSS 中编写 UI,并在 Rust、C++ 或其他原生语言中构建后端。如果您计划构建一个主要的原生应用程序,并且还想在特定视图中显示一个小网站,那么您最好使用操作系统提供的 Web 视图或类似 ultralight 的东西。