Featured image of post 桌面开发技术栈对比:Electron vs Tauri vs Qt vs Fyne

桌面开发技术栈对比:Electron vs Tauri vs Qt vs Fyne

跨平台桌面应用 4 大技术栈对比:Electron(Chromium + Node.js)、Tauri(Rust + WebView)、Qt(C++ 跨平台原生)、Fyne(Go GUI),从原理、性能、体积、生态四维度对比。

跨平台桌面应用 4 大技术栈

技术底层语言包大小性能生态
ElectronChromium + Node.jsJS/TS80~150MB★★★★★★★★
Tauri系统 WebView + RustTS + Rust2~10MB★★★★★★★★
QtQt 库C++ / QML / Python30~80MB★★★★★★★★★
Fyne系统 GUIGo10~30MB★★★★★★

一、Electron

原理

  • Chromium:渲染 UI(每个窗口一个)
  • Node.js:调用本地 API(文件系统、进程、IPC)
  • 主进程 + 渲染进程:主进程(Node.js)管理窗口,渲染进程(Chromium)展示 UI

优势

  • Web 生态完整:React、Vue 任意用
  • 跨平台:Windows / macOS / Linux 一套代码
  • 第三方 SDK 丰富:自动更新、native dialog、native menu

劣势

  • 包大:80MB 起步
  • 内存高:每个窗口一个 Chromium
  • 性能:JS 引擎有 GC 抖动

代表应用

  • VSCode、Slack、Discord、Notion、Postman、Figma Desktop

适用场景

  • 内部工具 / 中后台
  • 重 UI 重数据展示
  • 团队 JS 技术栈

二、Tauri

原理

  • 系统 WebView:Windows 用 WebView2,macOS 用 WKWebView,Linux 用 WebKitGTK
  • Rust 后端:编译成原生二进制,提供 IPC、文件系统、shell 等
  • 前端任意:React / Vue / Svelte / Solid / 纯 HTML

优势

  • 极小包:2~10MB(vs Electron 80MB)
  • 低内存:复用系统 WebView
  • Rust 后端:性能强、安全(内存安全)
  • 细粒度权限:声明式 ACL

劣势

  • WebView 跨平台表现不一致(Windows 较新,Linux GTK 旧)
  • 生态比 Electron 小
  • 学习曲线:Rust + 前端

代表应用

  • 各种 Rust 生态工具
  • 部分 VSCode 插件、Cursor 编辑器
  • OpenCode、cc-connect、tinyhumans/openhuman

适用场景

  • 追求包大小 / 启动速度
  • Rust 团队
  • 命令行 + GUI 一体

三、Qt

原理

  • Qt 库:跨平台 C++ GUI 库
  • QWidget:传统 UI
  • QML:声明式 UI(类 QML + JavaScript)
  • PyQt / PySide:Python 绑定

优势

  • 性能极强:原生绘制
  • 跨平台:Windows / macOS / Linux / Android / iOS / 嵌入式
  • 工业级:KDE、Autodesk Maya、VirtualBox、VLC
  • 工具链成熟:Qt Creator IDE

劣势

  • 学习曲线陡:C++ + Qt 框架
  • 商业授权:LGPL / GPL / Commercial 三种
  • 包大:30MB+
  • UI 不够现代(vs Web)

适用场景

  • 工业控制 / 嵌入式 UI
  • 科学计算 / 数据可视化
  • 跨平台 + 高性能

四、Fyne

原理

  • Go 语言:编译成单一二进制
  • 系统原生控件:Windows GDI、macOS Cocoa、Linux GTK
  • 声明式 API:类 Flutter 风格

优势

  • 跨平台编译:Go 一份代码,Windows/macOS/Linux 任意编译
  • 单二进制:无外部依赖
  • 小包:10~30MB
  • 简单易学

劣势

  • 生态小:第三方库少
  • UI 不够丰富:控件有限
  • 性能中等:没有 GPU 加速

适用场景

  • Go 团队
  • 内部工具
  • 简单桌面应用

详细对比

包大小

应用ElectronTauriQtFyne
Hello World80MB3MB30MB12MB
复杂应用(VSCode 级别)200MB+15MB100MB40MB

启动时间

应用ElectronTauriQtFyne
冷启动1.5~3s0.3~1s0.2~0.5s0.5~1s
热启动0.5~1s0.1~0.3s0.1~0.2s0.2~0.5s

内存占用

应用ElectronTauriQtFyne
空闲100~200MB30~80MB20~50MB30~70MB
复杂场景500MB+150MB100MB150MB

选型决策树

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
你的团队用什么语言?
├── JS/TS → Electron(生态最好)
├── Rust → Tauri(性能 + 体积最优)
├── C++ → Qt(性能 + 工业级)
├── Go → Fyne(最简单)
└── Python → PyQt / PySide

你的核心需求是?
├── 包小 + 快 → Tauri
├── 生态丰富 → Electron
├── 高性能 3D / 工业 → Qt
└── Go 写小工具 → Fyne

安装包大小优化

Electron

  • 移除不必要的依赖
  • electron-builder 拆分 platform / arch
  • asar 压缩资源

Tauri

  • 用 release 模式(默认)
  • 启用 LTO(Link Time Optimization)
  • 拆分 release(不同 OS 单独打包)

Qt

  • 静态链接 vs 动态链接
  • 删除用不到的 Qt 模块

Fyne

  • UPX 压缩
  • Go 1.20+ 链接器优化

跨平台坑

macOS

  • 签名 + 公证(notarization)必需
  • 沙箱(sandbox)
  • Apple Silicon(arm64)vs Intel(x64)

Linux

  • 各种发行版:deb / rpm / AppImage / Flatpak
  • WebView 版本:Ubuntu LTS 用 snap,WebView 是 Chromium

Windows

  • 32 / 64 位
  • WebView2 Runtime(Win10 1803+ 预装,旧版需引导安装)

下一步

  • Electron 入门,看 2018-12-15《Electron 跨平台桌面应用》
  • Tauri 2.x 实战,看 2020-05-15《Tauri 2.x 跨平台桌面应用》
  • Fyne 入门,看 2016-10-15《Go-Fyne 入门》

参考资料

  • Electron 官方:https://www.electronjs.org/
  • Tauri 官方:https://tauri.app/
  • Qt 官方:https://www.qt.io/
  • Fyne 官方:https://fyne.io/
  • Wails(Go + WebView):https://wails.io/
  • Flutter Desktop:https://flutter.dev/desktop
使用 Hugo 构建
主题 StackJimmy 设计