GPUI 原生界面 — 没有 Electron,GPU 直接画窗口
什么是 GPUI
GPUI 是 Zed 编辑器背后的开源 Rust 原生 UI 框架。它的核心思想是「GPU 直接画界面」——界面元素不是浏览器 DOM 渲染的,而是直接提交到 GPU buffer 上。FluxDown 桌面端是第一个用 GPUI 写的下载管理器。
和 Electron 方案的区别
| 维度 | Electron | GPUI 原生 |
|---|---|---|
| 启动时间 | 冷启动约 1–3 秒(Chromium 初始化) | 冷启动 < 500 ms |
| 空闲内存 | 典型 200–400 MB | 典型 20–50 MB |
| 进程数 | Chromium 多进程 | 单进程渲染(下载进程独立) |
| 跨平台一致性 | 浏览器内核自带,基本一致 | 框架自己在各平台实现窗口层 |
| 渲染依赖 | Chromium | GPU(Metal / DX11 / Wayland) |
| 包体积 | 60–150 MB(含 Chromium) | ~10 MB(纯 Rust 二进制) |
FluxDown 桌面安装包在 Electron 方案里至少要 60 MB 起步,现在压缩后约 15 MB。安装后占用不到 50 MB。
界面的样子
GPUI 让 FluxDown 能做到的几个界面特性:
- 启动秒显 — 冷启动直接看到主界面,没有空白白屏期。
- 窗口动画由 GPU 合成 — 队列滚动、进度条变化、侧边栏折叠都是流畅的 60 fps。
- 响应式面板布局 — 左侧状态栏 + 中间任务列表 + 右侧详情/设置面板,可拖动调整比例。
- 13 套内置配色 — 深色浅色各一,外加 accent 颜色可选(在「设置 → 主题」里调)。
它只是界面
重要的一点:GPUI 层只负责画界面,不执行任何下载。所有下载命令都通过本地 RPC 发给 Daemon(见 原生三层进程)。这意味着关掉桌面窗口(点击 X),下载继续跑;再打开界面,GPUI 层直接拉 Daemon 当前状态显示,不会重新启动下载引擎。
不那么理想的地方
GPUI 是比较新的框架,跨平台窗口层虽然已覆盖 Win/Mac/Linux,但一些桌面系统级集成(比如 Windows 上系统托盘的某些行为)可能不如成熟框架。官方也在持续迭代。