🐘 前言:Electron 的“富贵病”

Electron 的原理很简单:把一个完整的 Chrome 浏览器和 Node.js 打包进你的应用里

  • 优点:前端极其舒服,API 统一,不用管浏览器兼容性。
  • 缺点
  1. 体积大:Hello World 也要 60MB+(因为带着 Chrome)。
  2. 内存泄露:每个窗口都是一个 Chrome 进程,内存杀手。
  3. 安全性:Node.js 在渲染进程的权限过大,容易被 XSS 攻击利用。

Tauri 的逻辑是: 既然用户的电脑里已经有了浏览器(Windows 有 Edge/WebView2,macOS 有 Safari/WebKit,Linux 有 WebKitGTK),为什么我还要再带一个 Chrome?


⚔️ 一、 架构对决:为什么 Tauri 这么小?

架构原理图解 (Mermaid):

IPC 通信

系统调用

== 🏗️ Electron (大而全) ==

前端代码 JS/HTML

内置 Node.js 运行时

内置 Chromium 浏览器内核

== 🚀 Tauri (小而美) ==

前端代码 JS/HTML

Rust 后端 (替代 Node.js)

操作系统原生 WebView

核心差异:

  1. 渲染层:Tauri 使用系统自带的 WebView,不打包浏览器内核。
  2. 后端层:Tauri 使用 Rust 替代 Node.js。Rust 编译成二进制文件,无运行时开销,性能极高,内存极低。

📊 二、 性能实测数据

我们用 React 写一个同样的 Todo List 应用,分别用 Electron 和 Tauri 打包。

维度 Electron Tauri 胜出
安装包体积 ~85 MB ~3 MB 🏆 Tauri (小 30 倍)
启动时间 ~1.5 秒 ~0.4 秒 🏆 Tauri
冷启动内存 ~180 MB ~15 MB 🏆 Tauri (少 10 倍)
后端语言 JS/TS (Node) Rust 🤝 看团队基因
兼容性 完美 (自带 Chrome) 有坑 (依赖系统版本) 🏆 Electron
移动端支持 无 (需转 React Native) 支持 (Tauri 2.0) 🏆 Tauri

🦀 三、 Tauri 2.0 新特性:不仅是桌面,更是全平台

Tauri 1.0 只能做桌面端,而 Tauri 2.0 引入了重磅更新:支持 iOS 和 Android

这意味着,你写一套代码(React/Vue + Rust),可以同时打包出:

  • Windows (.exe)
  • macOS (.dmg)
  • Linux (.deb)
  • iOS (.ipa)
  • Android (.apk)

这直接对标了 Flutter 和 React Native,但保留了 Web 开发的灵活性和 Rust 的高性能。


💻 四、 实战:3 分钟创建一个 Tauri + React 项目

1. 环境准备
你需要安装 Rust (通过 rustup) 和 Node.js。

2. 初始化项目

npm create tauri-app@latest

按照提示选择:

  • Project name: my-tauri-app
  • Frontend flavor: React
  • Language: TypeScript

3. Rust 与前端的通信 (IPC)
Tauri 的黑科技在于极其简单的 IPC。我们写一个 Rust 函数,让前端调用。

  • 后端 (src-tauri/src/main.rs):
// 定义一个指令,供前端调用
#[tauri::command]
fn greet(name: &str) -> String {
    format!("Hello, {}! You've been processed by Rust.", name)
}

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet]) // 注册指令
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

  • 前端 (src/App.tsx):
import { invoke } from "@tauri-apps/api/core";

function App() {
  const callRust = async () => {
    // 调用 Rust 函数 'greet'
    const response = await invoke("greet", { name: "Tauri User" });
    console.log(response); // 输出: Hello, Tauri User! ...
    alert(response);
  };

  return (
    <button onClick={callRust}>Call Rust Backend</button>
  );
}

4. 运行与打包

npm run tauri dev   # 开发模式
npm run tauri build # 打包生产环境

打包完成后,你会发现 src-tauri/target/release/ 下的安装包只有 4MB 左右!


⚠️ 五、 避坑指南:Tauri 并不是完美的

虽然 Tauri 很香,但在决定切换之前,你需要知道它的痛点:

  1. 浏览器兼容性碎片化
  • Electron 自带 Chrome,你可以肆无忌惮地用最新的 CSS Grid 或 Web API。
  • Tauri 依赖用户的系统。Windows 用户如果没装 WebView2(虽然 Win10/11 默认有),或者 macOS 用户还在用老版本 Safari,你的 CSS 可能会崩。你需要写 Polyfill。
  1. Rust 学习曲线
  • 如果你的应用只做简单的 CRUD,Rust 后端基本不用动。
  • 但如果你要深度调用系统 API(如文件系统、蓝牙、串口),你需要现学 Rust。Rust 的借用检查器(Borrow Checker)会劝退很多人。
  1. 资源生态
  • Electron 的插件和现成解决方案(如自动更新、崩溃报告)比 Tauri 成熟得多。

🎯 总结与选型建议

什么时候选 Electron?

  • 你的团队全是前端,完全不会 Rust,也不想学。
  • 你需要绝对统一的渲染表现(Pixel Perfect)。
  • 应用非常复杂,不仅仅是简单的 GUI,比如 VS Code 这种级别的 IDE。
  • 你不在乎安装包大小(用户硬盘够大)。

什么时候选 Tauri?

  • 你受不了 Electron 的臃肿,追求极致的启动速度小体积
  • 你不仅想要桌面端,还想顺手把移动端 (iOS/Android) 也做了。
  • 你对安全性要求极高(金融、钱包类应用),Rust 的内存安全是巨大优势。
  • 你愿意为了性能,去学习一点点 Rust。

Next Step:
趁着 Tauri 2.0 刚发布,用它重构一个小工具试试水吧。当你看到生成的 .exe 文件只有 5MB 时,那种成就感是无与伦比的。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐