桌面应用程序
如果您正在尝试使用 JavaScript 来构建桌面应用程序,那么您可能至少考虑过使用 Electron。Electron 于 2013 年由 GitHub 为其 Atom 编辑器发布,已被微软、Discord 和 Slack 等许多大型公司使用。本文旨在客观地概述 Electron 及其优缺点。本文还概述了一些替代方案以及您是否希望使用它们。
2013 年,GitHub 试图制作一个新的、时尚的编辑器,称为 Atom。他们还想使用Web技术来构建它。不幸的是,当时并没有那么多使用 Web 技术构建应用程序的好工具。嵌入浏览器的方法很少,而且很多都没有很好地构建。GitHub 决定为此构建自己的工具并将其命名为 Atom-Shell。它发展迅速,即使 Atom 受到 VS Code 的重创。后来改名为Electron,现在也是这样。
Electron本质上是将Chromium和Node.js打包成一个桌面应用。Chromium是Chrome的动力,Node.js是最流行的服务器端JavaScript引擎。这两个项目都得到了很好的维护,而且很成熟,所以它们都是优化和可靠的工具。
Electron允许你在前端使用JavaScript,就像一个普通的网站一样。它还可以让你使用Node.js来访问文件和其他系统相关的操作。因为Electron允许你使用JavaScript来做任何事情,所以它作为制作JavaScript桌面应用的一种方式而变得很流行。
然而,因为Electron捆绑了整个浏览器和Node.js,所以它倾向于创建大型应用。一个简单的Electron应用程序在没有压缩的情况下通常体积约120MB。
相比之下,另一个流行的跨平台框架Flutter的应用程序只有5MB大小。此外,因为Electron同时运行多个JavaScript实例,所以它消耗大量RAM和CPU。如您所见,使用Electron既有优点也有缺点。
你应该使用Electron吗?
优点:
大社区
受到 Microsoft、Discord、Slack 等的信任
低的学习曲线
允许使用Web生态系统
集成了 Node . js
缺点:
大 (~120MB) 安装大小
使用大量的内存和CPU
不支持手机
有点不安全,允许用户轻松查看应用程序内部
无法在 Node.js FFI 之外集成本机代码
首先,在Electron背后有一个很大的社区,包括多家公司,这意味着有大量的开源工具、教程等等。你还可以利用Web生态系统的大部分工具和教程。Electron的学习曲线也很低,因为如果你知道JavaScript,你就知道Electron。另一个优势是Electron直接集成了Node.js,这使得你可以在沙盒之外使用JavaScript的全部功能。
然而,这些优点也有一些缺点。首先,Electron 既沉重又缓慢。Electron 应用程序的基本大小约为 120MB,并且占用大量 RAM 和 CPU,Electron的RAM消耗量可高达数百兆字节。
Electron 的另一个最大缺点是它没有任何移动支持。您可以将 Electron 应用程序部署到 Mac、Windows 和 Linux(不包括 PureOS 等一些发行版),但不能部署到 IOS 或 Android。对此有一些解决方案,例如使用 Ionic,但其中许多解决方案需要更改大量代码和工具。
另外,如果你有一个注重安全的应用程序,Electron可能不是你最好的选择。Electron允许用户通过开发者工具和ASAR源文件轻松访问源代码。当然,同样的事情也可以用在Web应用程序上,但一些桌面框架,如Tauri,使访问源代码变得更加困难。
最后,如果你在 Electron 中尝试使用其他语言来替代 Node.js,你会遇到一些麻烦。您可以使用其他语言,但只能通过 WebAssembly 或 Node.js FFI,这可能很难设置并降低性能。
正如你所看到的,Electron在很多方面都很好,但在其他方面却不那么好。总的来说,如果你想在任何地方使用JavaScript,并且不太关心性能或安全问题,Electron是一个相当不错的选择。然而,如果你有任何性能方面的考虑,需要移动支持,或者想要最佳的安全性,你可能不会想使用Electron。
Electron的替代品
Tauri
Electron 和 Tauri 之间有两个主要区别。
首先是 Tauri 使用操作系统内置的浏览器,这大大减少了应用程序的大小并可以提高其性能。
第二个是 Tauri 的后端是用 Rust 而不是 Node.js 构建的。这使得直接使用 Rust 成为可能,而无需求助于 Node.js FFI 或 WASM。这也使 Tauri 更快,内存效率更高。Tauri 应用程序可以小到几兆字节,而且它们的内存使用量通常不到 Electron 应用程序的一半。
Tauri也可以更安全,因为它混淆了源代码,并在生产中禁用了开发者工具。Node.js默认不包括在Tauri中,但你可以添加它。但Tauri仍有缺点。第一个问题是,由于Tauri并不总是使用Chromium,你必须支持多种浏览器。
另一个缺点是,Tauri比较新,没有那么大的社区。如果你愿意尝试一项新技术,Tauri是一个很好的选择。
优点:
应用程序更小,资源占用更少
更安全
与 Rust 集成
缺点:
部分用户不会使用 Chrome
较小的社区
Progressive Web App(PWA)
渐进式Web应用程序或PWAs是被大多数浏览器原生支持的逐步增强的Web应用程序。
浏览器可以在您访问其网站时检测 PWA 并显示安装它们的提示,而不是打包到可安装文件中。您还可以从 Microsoft App Store 和 Google Play 等应用商店安装 PWA。
从浏览器中安装是可行的,因为PWA本质上是多了一些功能的网站。这意味着用户可以使用网站的基本功能,如果他们想要更多,他们可以安装PWA。这就是为什么它们会逐步增强。
创建PWA有许多优点。首先,它们很小,由于PWA和你的网站资源一样大,你可以制作小到几百KB的完整应用程序。
另一个优点是,更新PWA和更新网站一样简单。你不需要做一个自动更新器,而只需配置缓存软件,在有更新的时候更新缓存。PWA也很容易分发到许多不同的平台,包括所有主要的移动和桌面平台。
PWA 也有一些缺点。
首先,他们对原生 API 的访问权限有限,并且浏览器对这些 API 的支持可能会受到限制。其次,Firefox 并不完全支持 PWA。
最后,PWA目前不能以许多常见的形式发布,尽管在允许PWA被打包成MSIX包等格式方面有很大的进展。如果你想使用未来的Web应用程序,想要轻松部署和更新,或者想要移动支持,PWA是一个很好的选择。
优点:
可直接从网站提示安装
通过应用商店轻松分发
也能自动作为网站使用
非常小(可以小于1MB)
易于更新
支持桌面和移动设备
缺点:
有限的原生 API 访问
Firefox 不支持 PWA
难以作为基于文件的安装程序分发
总结
在某些情况下,Electron能会有所帮助。然而,它并不总是最好的工具。这一切都取决于您的应用程序的需求和重点。
如果您更喜欢与拥有更大社区的项目合作,Electron 是一个不错的选择。如果您使用 Rust 并想要快速的桌面 Web 应用程序,Tauri 非常适合。最后,如果你想快速进入市场、移动支持,并且不想维护你的应用程序的两个版本,PWA 可能会很好地工作