编程 告别 Electron 的 150MB:Fyne / Gio / Wails / Tauri 四框架选型实录

2026-07-09 07:56:09 +0800 CST views 17

告别 Electron 的 150MB:Fyne / Gio / Wails / Tauri 四框架选型实录

Electron 在财务报表这类场景下几乎是"双重叠加"的惨:Chromium + Node 双运行时保底 150MB,前端再挂个 AG-Grid / Handsontable 渲染万行明细,JS Heap 再吃掉 1GB+。

2026 年桌面 GUI 的格局已经很清楚了——"轻量替代"这条线,Tauri 和 Wails 把坑踩得差不多了;而 Go 侧还有两条不太被人提的路:Fyne 的自绘派、Gio 的即时模式派。

先给结论:四条路的定位差别比想象中大

它们其实是两类技术路线

WebView 混合派:UI 给前端(HTML/CSS/JS),后端跑原生语言,渲染借系统 WebView,不打包 Chromium

  • Wails(Go 后端)
  • Tauri(Rust 后端)

纯语言自绘派:UI 和渲染全自己来,不碰前端

  • Fyne(Go,Material Design 风,像"Go 版 Flutter")
  • Gio(Go,即时模式 + GPU,布局全手写)

路线一:WebView 混合派

Tauri(Rust 后端)

前端(React/Vue/Svelte) ←invoke()→ Rust 后端 → 系统 WebView
                               ↑#[tauri::command] 宏
  • 空应用 ~3-8MB(Electron 的零头)
  • 渲染:Win=WebView2 / mac=WKWebView / Linux=WebKitGTK
  • Tauri 2.0 已支持 iOS / Android,桌面 + 移动一套代码
  • 安全模型:capability 权限白名单,文件/Shell 默认全关
  • 代价:Rust 所有权 + 生命周期,新手第一个 cargo build 就会卡壳

Wails(Go 后端)

前端(React/Vue/Svelte) ←自动生成 JS Binding→ Go 后端 → 系统 WebView
  • ~8-20MB,比 Tauri 略大(GC 运行时)
  • Go 结构体 Bind() 后自动生成 TS 类型,前端调后端像调本地函数
  • v3 alpha 中:多窗口、原生菜单、系统托盘补齐了 v2 的短板
  • 硬伤:无移动端、生态插件比 Tauri 少一截、v3 还在 alpha

两者怎么挑

维度TauriWails
后端语言RustGo
空包体积~3-8MB~8-20MB
编译速度快(5-7s 增量)
移动端✅ v2 已支持❌ 桌面 only
插件生态100+少一档
学习曲线

团队语言决定 80% 的答案:Rust 栈 / 要移动端 → Tauri;Go 栈 / 内部工具快速出活 → Wails。IPC 性能差距工程里感知不到。

路线二:纯 Go 自绘派

Fyne

  • Material Design 风格,API 像 Flutter 的 Go 版
  • OpenGL 硬件加速,深色/浅色主题内置
  • 跨平台最活跃的 Go GUI,v2.6 已支持 Wasm / iOS / Android 打包
  • 中文输入法、复杂表格/树形组件仍然"够用不够爽"
  • 调试靠 printf

Gio

  • 即时模式(Immediate Mode)GUI + 自研渲染管线 + GPU 加速
  • 布局全代码写,没有 JSX 那种舒服的声明式体验,学习曲线陡
  • 性能是真狠——启动最快、内存最低、体积最小
  • 适合:数据可视化、CAD、绘图工具、嵌入式屏

Gio 的取舍很极端:你想要"拖个按钮出来"就别选它,你想要"每帧 60fps 自定义绘制"它是 Go 侧独苗。

四框架一维速查

TauriWailsFyneGio
后端语言RustGoGoGo
要不要写前端不要不要
移动端
包体最小最小
学习曲线
代表场景产商品牌内部工具配置面板绘图/CAD

社区 benchmark 参考(同硬件)

框架启动时间启动内存包体
Fyne~180ms~45MB~12MB
Gio~120ms~38MB~7MB
Wails~350ms~120MB~18MB

选型决策树

  1. 团队是 Rust 栈 / 要移动端 / 做 toC 产品 → Tauri,v2 移动端是独一档
  2. 团队是 Go 栈 / 内部工具 / 想爽快点 → Wails,v3 出来后多窗口也能打了
  3. 纯 Go 单语言、不想碰前端、界面不复杂 → Fyne,Material 现成的
  4. 要极限帧率 / 自定义绘制 / 嵌入式 → Gio,但布局全手写要有心理准备

一个容易被忽略的点

Wails / Fyne / Gio 都是纯 Go、无 CGO(Fyne 的 OpenGL 驱动层除外一点点),GOOS=windows GOARCH=amd64 交叉编译一条命令出包,比 Tauri(Rust + 偶尔 C 依赖)顺很多。

反过来,Tauri v2 的移动端 + 多窗口 + capability 权限体系,Go 侧目前没人能对打——如果你是"桌面 + 以后可能上移动",Tauri 是唯一选项。

推荐文章

JavaScript中设置器和获取器
2024-11-17 19:54:27 +0800 CST
php内置函数除法取整和取余数
2024-11-19 10:11:51 +0800 CST
CSS 特效与资源推荐
2024-11-19 00:43:31 +0800 CST
Gin 框架的中间件 代码压缩
2024-11-19 08:23:48 +0800 CST
程序员茄子在线接单