大家好,我是老刘
2024年,Tauri发布,全网一片叫好:"Electron 杀手"、"安装包体积缩小 90%"、"Rust 性能加持"。各路技术博主(包括我在内)都在聊这个新玩具。
结果呢?2026年4月,Opencode团队在dev.to上发了一篇文章,标题很诚实:
Moving OpenCode Desktop to Electron dev.to/brendonovic...
意思就是:我们试过了,现在要切回 Electron。
官方给了三个理由:
1. WebKit 渲染问题 Tauri 在 macOS/Linux 上使用 WebKit 渲染,性能不如 Chromium,且不同平台间样式不一致,维护成本高。
2. CLI 启动瓶颈 Bundled CLI 影响启动速度,Windows 上偶发失败,用户体验打折扣。
3. Bun → Node 迁移 团队计划从 Bun 迁移到 Node,Electron 内置 Node 进程,服务器代码运行更简单,减少一层运行时依赖。
这三个理由看起来都很具体,那么这两个开发框架的差别到底在哪里?
Tauri vs Electron
老刘在2024年的时候就发文章对比过Tauri:
只不过那时候更多是站在手机端的角度进行对比。
如果是站在桌面端的角度,Tauri和Electron就是非常典型的一对竞争对手。
他们俩之间的关系非常像手机端的RN和flutter。
RN和Tauri都是将渲染部分交给了系统,他们自己只负责维护逻辑上的UI树。因此它们的体积都可以做到非常小。
而Flutter和Electron都是将渲染引擎打包到程序内部,因此安装包的体积看起来就会大很多。
这也是当前很多项目采用Tauri作为技术栈的一个卖点,宣称自己体积是竞品的多少分之一,启动速度快,运行效率高。
但这其实是个误导,软件包的体积和运行速度没什么直接关系。
体积不代表性能
关于性能咱们拆成启动速度和运行速度来看。
启动速度
Tauri 最小 2-5MB,Electron 动辄 50-150MB,差了 20 倍以上。直觉上,把 5MB 加载到内存肯定比 100MB 快。
但现在的电脑基本都是 SSD(PCIe 3.0/4.0),读取速度约 3500-7000 MB/s:
- 加载 5MB → 约 1.4 毫秒
- 加载 100MB → 约 28 毫秒
- 差距:26 毫秒
人眼的极限反应速度大约是 100 毫秒。这 26 毫秒的差距,你根本感知不到。所以"体积小=启动快"这个卖点,在 SSD 普及的今天基本不成立。
运行速度
Tauri 的 UI 部分仍然是 TS 开发的,只有底层逻辑可以用 Rust。这就带来一个问题:哪些代码该交给 Rust?
典型的场景是 CPU 密集型的运算任务:大规模日志扫描、数据加解密、压缩解压缩。如果你的应用这类任务多,Tauri 确实能发挥性能优势。
但如果你的主要工作就是展示几十个字段的 JSON 数据(不管是来自本地还是服务端API),把这种处理也塞进Rust,除了增加代码复杂度,没什么明显收益。
说白了,Tauri只在特定场景下有性能优势。
多端一致性和兼容性
Opencode 迁移的真正原因在哪儿?也是很多项目选型最容易忽视的问题:多端一致性。
看两张架构图就明白了。
Electron 的架构:
scss
┌──────────────────────────────┐
│ Renderer Process │ ← 跑 Chromium,展示 UI
│ (HTML + CSS + JS/TS) │
└──────────┬───────────────────┘
│ IPC (进程间通信)
▼
┌──────────────────────────────┐
│ Main Process │ ← 跑 Node.js,管理窗口生命周期、系统调用
│ (Node.js + Electron API) │
└──────────────────────────────┘
Electron 把 Chromium 和 Node.js 都打包进了安装包,渲染过程完全不依赖操作系统。你在 macOS 上看到的样子,到 Windows、Linux 上还是一模一样。
Tauri 的架构:
yaml
┌──────────────────────────────┐
│ 系统原生 WebView │ ← macOS: WKWebView / Linux: WebKitGTK
│ (HTML + CSS + JS/TS) │ Windows: WebView2 (Edge Chromium)
└──────────┬───────────────────┘
│ IPC (进程间通信)
▼
┌──────────────────────────────┐
│ Tauri Core (Rust) │ ← 窗口管理、系统调用、进程管理
│ (Rust + Tauri API) │
└──────────────────────────────┘
为了更小的体积,Tauri 把渲染工作委托给了系统自带的 WebView。安装包确实小了很多,但代价是:三个平台,三套 WebView 实现。
这里面还是有不少坑的,我见过不少 Tauri 项目踩过这些坑:
- macOS(WKWebView) 不支持某些 CSS 网格布局特性,
backdrop-filter有性能问题,滚动弹跳效果跟其他平台不一致 - Windows(WebView2 / Edge Chromium) 相对最好,但部分win10以下版本没装 WebView2 运行时,需要额外引导安装
- Linux(WebKitGTK) 版本碎片化严重,Ubuntu 自带的 WebKitGTK 可能还是两三年前的版本,某些 ES6+ 语法直接不支持
这意味着你写好一套 UI,需要在三个平台上各自测试、各自调优。如果是小团队或者独立开发者,这个维护成本非常可观。
这就是 Opencode 踩过的坑:"在 macOS 上测试好好的,到 Windows 上样式渲染出来就是不一样,Linux 上动画掉帧"。这是Tauri这种嫁接在系统渲染之上的框架固有缺陷。
反观 Electron,虽然安装包大了点,但 Chromium 的渲染一致性是业界标杆。而且这几年 Chromium 的优化一直在进步,V8 引擎越来越快,GPU 加速越来越成熟,内存管理也在改善。用体积换来的是一套代码在所有平台上的确定性。
对于 AI 时代的桌面应用来说,这就很要命了。AI 编程工具的核心功能是什么?聊天界面、代码高亮、Markdown 渲染、实时流式输出。这些东西对 UI 一致性的要求远高于对原生性能的要求。而 WebView 碎片化带来的"修不完的兼容性 bug",恰恰是最消耗开发精力的地方。
总结:端侧技术栈到底怎么选?
说到底,从 Tauri 切回 Electron,不是 Tauri 不好,而是不适合他们的项目类型。
我列个对照表,你自己对号入座:
| 维度 | Tauri | Electron |
|---|---|---|
| 安装包体积 | 2-5MB | 50-150MB |
| 启动速度 | 快约 26ms(感知不到) | 慢约 26ms(感知不到) |
| UI 一致性 | ❌ 依赖系统 WebView,三平台三套表现 | ✅ Chromium 渲染,全平台一致 |
| 原生性能 | ✅ Rust 侧适合 CPU 密集型任务 | ❌ 但大多数 UI 应用用不到 |
| Web API 兼容性 | ❌ WebKit 版本碎片化 | ✅ 与 Chrome 保持一致 |
| 生态成熟度 | 快速发展中,部分功能不完善 | ✅ 极其成熟,几乎所有场景都有方案 |
| 调试工具 | 需要跨语言调试(TS + Rust) | ✅ 一套 Chrome DevTools 搞定 |
| AI 工具友好度 | 中等(Rust AI 生态不如 JS/TS) | ✅ TypeScript + Node 生态,与 AI 工具链无缝对接 |
| 团队要求 | 需要前端 + Rust 双技能 | 纯前端即可 |
老刘的建议
如果你的项目以 UI 交互为核心(聊天工具、编辑器、IDE、管理后台、AI 客户端),选 Electron。你的体积焦虑在用户电脑的 SSD 面前一文不值。真正值钱的是:一套代码跑三个平台、AI 生态无缝对接、社区方案随手可得。
如果你的项目确实以 CPU 密集型任务为主(视频处理工具、大数据分析客户端、文件格式转换器),并且 UI 相对简单,可以考虑 Tauri。Rust 在计算密集场景下的优势是实实在在的,Tauri 的轻量体积在这种情况下也更有意义。
回到老刘自己,为啥我一直倾向 Flutter 和 Electron?因为我做的项目大多是 UI 密集型 的:状态管理、交互设计、跨端一致性,这些才是用户能感知到的东西。用户不会因为你省了 100MB 硬盘空间就夸你好,但会因为某个按钮在 Windows 上点不了而骂你。
最后说句实在话:
对于 AI 时代的独立开发者和小团队来说,时间窗口是最稀缺的资源。Opencode 的迁移告诉我们:与其花时间跟 WebView 碎片化搏斗,不如把精力放在产品本身。
如果你今天要做一个桌面端的 AI 工具,直接从 Electron 开始。别纠结那几十 MB 的体积,你的 MVP 上线时间比什么都重要。
先跑到终点的,不是包袱最轻的那个,而是路上少摔跤的那个。
🤝 如果看到这里的同学对客户端或者Flutter开发感兴趣,欢迎联系老刘,我们互相学习。
🎁 私信免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。可以作为Flutter学习的知识地图。
💬 : laoliu_dev
📂 老刘也把自己历史文章整理在GitHub仓库里,方便大家查阅。