前端知库

Electron 和 Tauri 有什么区别?桌面应用怎么选型?

从渲染引擎、后端语言、包体积、跨平台一致性、权限模型和生态比较 Electron 与 Tauri,并给出按需求选型的思路。

参考答案

简答

  • Electron 随应用打包 Chromium 和 Node.js,后端逻辑写在 JavaScript 里;Tauri 使用操作系统自带的 WebView,后端是编译成原生二进制的 Rust。
  • Tauri 不附带浏览器引擎,官方称最小应用可以小于 600KB;Electron 官方承认多数应用超过 100MB。
  • Electron 所有平台使用同一个 Chromium 版本,渲染一致、安全补丁随应用发布;Tauri 在 Windows 用 WebView2(Chromium),在 macOS 和 Linux 用 WebKit,需要处理不同引擎和系统版本的差异。
  • Tauri 通过 capabilities 文件按窗口授予权限,前端只能调用被允许的命令和插件 API;Electron 的权限边界主要靠 preload、沙箱和开发者自己校验 IPC。
  • 团队以 JS 为主、需要成熟生态和渲染一致性时选 Electron;对包体积和内存敏感、愿意使用 Rust 时选 Tauri。

架构对比

ElectronTauri
渲染引擎内置 Chromium系统 WebView
后端Node.js 主进程Rust 核心,插件可用 Swift、Kotlin
前端调用后端IPC(invoke/handle 等)invoke 调用 Rust 命令,事件做单向通知
数据传输结构化克隆类 JSON-RPC 协议,参数和返回值必须能序列化为 JSON
权限preload + contextBridge + 沙箱capabilities 按窗口授予权限

Tauri 的窗口由 TAO 创建,WebView 由 WRY 抽象,Rust 核心负责配置、系统 API 和更新。Tauri 2 的目标平台还包括 iOS 和 Android。

渲染一致性

Tauri 使用的 WebView:

  • Windows:WebView2,基于 Microsoft Edge(Chromium)。Windows 11 自带,旧系统由安装程序确保存在。
  • macOS:WKWebView,属于系统组件,不再受支持的 macOS 版本不会收到 WebKit 更新。
  • Linux:webkitgtk,版本由发行版决定。

所以 Tauri 应用要在 Chromium 和 WebKit 两套引擎上测试 CSS、Web API 和性能,最低支持的系统版本决定了能用哪些 Web 特性。

Electron 文档解释了打包 Chromium 的理由:使用系统 WebView 时,可用能力受限于需要支持的最旧系统中的浏览器版本;遇到 WebView 自身的 bug 或安全漏洞,开发者无法自行修复,只能等用户升级系统。打包 Chromium 后,开发者可以随应用更新发布修复。代价是更大的安装包和更多的维护工作。

体积和资源

  • Tauri 不附带浏览器引擎,后端编译成原生二进制,包体积小,内存占用通常也更低。
  • Electron 文档承认,简单页面下系统 WebView 有时更省资源;对于大型应用,他们认为新版 Chromium 的表现更好。如果小体积是硬性要求,Electron 文档也明确表示 Electron 不合适。

具体体积和内存数据受功能、依赖和平台影响很大,选型时应用同样功能的原型实测。

权限模型

Tauri 的 capability 文件放在 src-tauri/capabilities 目录下,列出允许哪些窗口(按窗口 label 匹配)使用哪些权限,例如 core:window:allow-set-title。核心 API 默认只对打包进应用的本地代码开放,远程页面需要单独配置 remote.urls。官方也说明 capabilities 只能降低前端被攻破后的影响,不能防御恶意 Rust 代码、WebView 0-day 或供应链攻击。

Electron 没有类似的声明式权限清单,开发者需要自己在 preload 中暴露窄接口,并在主进程中校验每个 IPC 调用,见《Electron 应用的主进程、渲染进程和 IPC 有哪些安全边界?》。

怎么选

  • 选 Electron:团队只熟悉 JS/TS;需要大量 Node.js 生态或已有 Node 原生模块;要求各平台渲染完全一致;已有成熟的 Electron 发布和更新流程。
  • 选 Tauri:安装包体积和内存敏感;需要同一套代码覆盖移动端;团队可以维护 Rust 代码;界面主要使用跨引擎兼容良好的 Web 特性。
  • 都不一定合适:主要是原生应用,只需要嵌入少量网页时,可以直接用系统 WebView。

常见追问