Tauri v2 vs Electron:真实开发 6 个月后的诚实感受
Source: Dev.to
概览
所有测试均在一台 8 年旧的 MacBook Air 上进行。经过对 Electron 的严肃评估后,我已经使用 Tauri v2 发布了多个 macOS 应用。以下内容基于六个月的真实开发经验——而非合成基准测试。
包体积
- Electron 捆绑 Chromium,导致应用在未添加任何代码前体积约为 150 MB。
- Tauri 使用系统自带的 WebView(macOS 上为 WKWebView)。我最大的 Tauri 应用的 DMG 体积 低于 10 MB。
对于在 App Store 之外分发的付费应用,这一差异相当显著——一个简单的 PDF 工具如果需要下载 150 MB,往往很难吸引用户。
语言与开发体验
| 方面 | Electron | Tauri |
|---|---|---|
| 主要语言 | JavaScript/TypeScript | 后端使用 Rust,前端使用任意 Web 技术 |
| 学习曲线 | 如果已经会 JS,则较低 | 对 Rust 新手来说更高;需要 2–3 个月适应借用检查器和异步共享状态 |
| 类型安全 | 运行时无类型安全 | 编译时强类型保证;类型系统在代码到达用户前捕获大量错误 |
| 性能余量 | 受限于 Chromium | 余量大,得益于原生 Rust 代码 |
即使已有一定的 Rust 基础,我仍觉得开发速度低于预期。
权限与插件生态
- Tauri 的 capabilities/permissions 系统 能细粒度控制每个窗口的访问权限。
- 插件生态 正在快速扩展。常用插件包括:
tauri-plugin-fstauri-plugin-shelltauri-plugin-notification
大多数常见功能已经可以直接使用。
进程间通信 (IPC)
前端与 Rust 后端之间的通信使用 invoke()。在正确配置下,这种 IPC 干净且类型安全。
原生 macOS API 访问
访问 macOS 特定 API(如 PDFKit、Vision Framework)需要 Swift/Objective‑C 辅助二进制。Tauri 并未抽象这一层,必须自行构建并管理桥接。功能可用,但文档相对匮乏。
热重载与开发速度
cargo tauri dev为前端提供 热重载。- 对 Rust 代码的修改会触发 完整重新编译,复杂后端需要 30–60 秒。
- 相比之下,Electron 的开发体验显得更快。
错误处理
当 Tauri 命令失败时,前端通常只收到通用的 “command failed” 信息。若想获得有用的诊断信息,需要在 Rust 端 显式序列化错误。
结论
Tauri v2 对于 包体积、性能以及 Rust 集成 有较高要求的应用是一个强有力的选择。但它 并非万用方案;合适的工具应依据项目约束和团队技术栈来决定。
示例应用: Hiyoko PDF Vault –
— @hiyoyok