你见过那个瞬间——
构建完打出来一个
"YourApp Setup.exe",180MB,你盯着它愣了两秒,转头去看
"node_modules" 里嵌套了七层的依赖树,再看看任务管理器里两个 Electron 应用各占 300MB 内存……你心里清楚:这东西能跑,但不是对的。
问题不是 Electron "不好"。它做了一个极其明确的交易:把整份 Chromium + Node.js 打进包里,换你一套代码三端稳稳跑,渲染环境百分之百可控。 这笔买卖对 VS Code 级别的应用完全成立。但对大量"其实就是想给本地逻辑套个界面"的项目来说,你付的租金远高于你占的地。
真正的分叉只有一条
如今跨平台桌面的所有选项,归根到底分两派:
一派是"我自带浏览器"。 环境你不用操心,代价是包体和一个空跑进程的基线内存都下不来。
另一派是"我用系统自己的 WebView 渲染,后端换轻量语言接管。" Windows 上调 WebView2(就是 Edge 那个内核),macOS 走 WKWebView,Linux 走 WebKitGTK。浏览器没被打进包里,所以产物能压到几 MB 到十几 MB,内存也掉一个量级——但这个便宜不是白捡的:渲染一致性你要自己测,Linux 依赖你要自己兜底,平台工程的工作量从"零"变成了"真实的正数"。
看清这一层,选型就不再是"哪个框架牛",而是——你的项目愿意付哪种代价?
三条路的真性格
Electron 的性格最简单:最快交付、最大生态、最不挑运行环境。你团队如果本来就是前端技术栈,它就是最省心的默认项。别因为网上流行骂它就显得自己很叛逆——明知代价仍然选择它,才是理性;为骂而骂替换掉它,才是坑。
Tauri 的性格最硬核。后端用 Rust,权限模型做得像样(默认全关、显式声明能干嘛的那种),Tauri 2.0 甚至把桌面和移动端(iOS/Android)拉进了同一套体系。但它的门槛是真实的:Rust 的所有权、生命周期、编译反馈链,不是你周末看两篇文章就能愉快上手的。它适合要打安全牌、要榨性能、且愿意把 Rust 纳进技术栈的长期项目——不是不适合你,是你得诚实地算一笔账:省下来的包体积,值不值多养一门系统语言?
Wails 的性格最务实。架构跟 Tauri 同源(系统 WebView + 轻量后端),但后端换成 Go。你定义一个带方法的 Go 结构体,它自动生成前端的 TypeScript 绑定——类型安全,不用手写 IPC 序列化胶水。对写惯了强类型后端语言的人来说,这感觉不是"学新框架",是把你已经会的服务端写法平移到了桌面端。
为什么说 Go 这条路被严重低估
很多人听到 Wails 就把它降级成"小众选择",但站高一点看,这笔账其实很清楚:
- Go 的学习曲线对后端背景的人来说几乎是平的。 语法薄、工程化习惯简单、编译飞快,不需要跟 borrow checker 谈判。
- 你学的不是"桌面框架的用法",是 Go 本身——它可以同时跑你的服务端、CLI 工具、本地 agent、后台守护进程。桌面只是它其中一个 surface。这跟"为了桌面去学一门只能写桌面/底层的语言"是完全不同的投资回报逻辑。
- Electron 的"重"是结构性支出;Rust 的"硬"也是结构性支出。Go 这条路的支出最平滑:你今天用它写了个桌面工具,明天同一门语言去写服务端接口、写部署脚本、写内网 agent,全通。
所以如果你属于那种"主业写后端逻辑、偶尔需要给某个功能加个桌面壳"的场景——运维面板、DevOps 工具、本地代理、配置管理器、硬件调试工具——Wails 往往不是妥协,而是最优解。
你真正该问自己的三个问题
不是问"哪个更新",而是:
1. 你的分发场景对体积敏感到哪一步?
用户要从公网下载、推广转化要走量、或企业环境批量下发——体积每多 100MB 都是真实摩擦。敏感到这个程度,Electron 就该从默认项里拿掉。
2. 你的渲染需求吃不吃 Chrome-only 特性?
复杂富交互、重度依赖某批 Chrome 私有行为、打印/预览链条深——那系统 WebView 的碎片化会让你后悔。反之如果只是常规 UI + 表单 + 列表 + 调本地能力,WebView 完全够。
3. 你们愿意付的"新语言税"是多少?
零 → Electron;愿意投 Go 但别想养 Rust → Wails;能认真投 Rust且看得见长期收益 → Tauri。
最后一句话
Electron 卖的是确定性。Tauri 卖的是克制和安全。Wails 卖的是:你本来就会的东西,刚好也能做桌面,而且做得不丢人。
选型别选口号,选代价。想通你项目的底色是哪类代价更可接受,答案自己会浮出来。
欢迎在评论区讨论,哪个适合你呢?关注不迷路
夜雨聆风