跳到正文

FluxDown 0.5.0 原生 GPUI 客户端正式发布——作者来信:为什么我把整个界面从头重写了一遍。去看看

FluxDown
下载 文档 定价 更新日志 赞助
公告 · v0.5.0

我把 FluxDown 的界面,从头重写了一遍

这不是一次换皮。过去很长一段时间,我几乎把全部精力都投在了一件事上:让 FluxDown 成为真正的原生应用——点开即在,关掉不停,每一帧都跟手。下面是我为什么这么做,以及它会给你带来什么。

来自 FluxDown 作者 ZerxLab

这次重写,用数字说
个进程,各司其职
3
个独立界面模块
11
行 Rust 界面代码
~6.8 万
行重写的 Web 控制台
~3 万

§ 01

为什么要推倒重来

先说实话:Flutter 版的 FluxDown 能用,也陪很多人下完了数不清的文件。但每次打开它,我都知道,它离我心里那个下载器还差一口气。

它的界面和下载引擎挤在同一个进程里,中间靠一层 FFI 信号桥来回传话。界面一旦出问题,正在跑的下载也跟着遭殃。

多窗口是另一道坎。Flutter 桌面端没有真正的多窗口:设置、队列管理、任务详情,都只能塞进主窗口里当对话框。光是一个快速下载小窗,我就得在三个平台各写一套原生宿主——Windows 用 C++、macOS 用 Swift、Linux 用 C——再往里塞进第二个完整的 Flutter 引擎,靠消息通道和主窗口来回同步。

内存,则是最让我过意不去的地方。那个小窗的引擎一旦创建就不敢销毁——反复创建销毁会崩溃——只能一直占着内存直到程序退出;而为了让下载在后台继续,整个 Flutter 界面也得跟着常驻内存,哪怕你一整天都没打开过它。

还有开发节奏:加一个按钮,要先写 Rust 信号、再生成 Dart 绑定、再写一遍 Dart 模型——同一件事,用两种语言各写一遍。时间都花在了来回搬运上,而不是打磨你每天盯着看的那个窗口。

所以我决定停下来,不再给旧界面打补丁,而是从零开始,用一套纯 Rust 的原生 UI 重写整个桌面客户端。

我想要的下载器,是你几乎感觉不到它的存在:点开就在,关掉也不停,从不拖你后腿。

§ 02

为什么是 GPUI

GPUI 是 Zed 编辑器背后的 Rust UI 框架,界面由 GPU 直接绘制。没有 WebView,没有 Electron,也没有第二种语言——从下载引擎到屏幕上的每一个像素,现在都是同一套 Rust 代码。

这意味着更少的中间层、更短的链路,以及 macOS、Windows、Linux 上各自原生的窗口。它不是把网页塞进一个壳里,而是真正属于桌面的应用。

多窗口在这里是一等公民:设置、队列管理、任务详情、进度窗口都是真正的原生窗口,共享同一个进程和同一份实时状态——想开几个开几个,关掉就真正释放。

§ 03

新的架构:把下载和界面彻底分开

这次重构里最重要的决定,其实你看不见:FluxDown 被拆成了三个各司其职的进程。

  1. 01

    fluxdown-desktop 界面

    只负责把画面画好。按需启动,关掉即退出,不在后台留下任何东西。

  2. 02

    fluxdown-agent 网关

    常驻后台,负责托盘、浏览器接管、剪贴板、云同步与本机 API。

  3. 03

    fluxdownd 下载核心

    独占下载引擎与数据库,掌管任务、队列、定时、RSS、插件与 Webhook。

带来的变化很直接:关掉窗口,下载照旧;再次打开,界面立刻接上实时状态。关掉最后一个窗口,界面进程随之完全退出,占用的内存如数还给系统——后台常驻的只剩不含任何界面运行时的 agent 与下载核心。界面进程无论出什么状况,都碰不到正在下载的文件。而且下载核心与界面之间只说一种协议,NAS 上的 Web 控制台终于和桌面客户端共用同一套能力。

§ 04

新的界面:每一处都重新想过

架构之外,界面本身我也一个像素一个像素地重做了。挑几个我自己最喜欢的变化:

命令面板
⌘K / Ctrl+K 一键唤出,所有操作与设置一搜即达;支持拼音、首字母与混拼,越常用的越靠前。
真正的多窗口
设置、队列管理、任务详情、单任务进度窗口各自独立,位置和尺寸都会被记住。
看得见的文件
任务列表直接显示系统文件图标;双击打开,拖出窗口就是文件(macOS / Linux Wayland),文件被移走或删除会立刻标出来。
看得懂的速度
任务详情新增「来源构成」与「速度」页,CDN、代理、每张网卡各贡献了多少,一目了然。
不乱跳的列表
进度刷新时行序保持稳定;任务再多,页面依旧顺滑。
重做的主题
声明式 token 格式,对比度自动保证可读;还能在官网的主题编辑器里调出属于你的配色。

§ 05

不只是桌面

既然底座换了,我顺手把整个家族都拉到了同一条起跑线上。

全新 Web 控制台
NAS / 服务器端的 Web 控制台从头重写,布局与操作和桌面客户端一一对齐。
多设备协同
把任务下发到云设备或局域网内已配对的设备;局域网直连配对用一串安全码确认。
多网卡聚合
多张网卡合力下载同一个文件;自动代理改为多路径并行调度。
告别老问题
一长串修复:HTTP 续传校验、HLS / DASH 无声、ED2K 超过 4 GB、BT 暂停竞态、队列定时……
更安静,更快
空闲时不再唤醒 NAS 休眠的硬盘;冷启动更快,等窗口的时间更短。

§ 06

升级前你需要知道

你的任务、历史和设置沿用同一个本地数据库,升级后原样都在。Windows 安装包会直接覆盖升级旧的 Flutter 版,文件关联和 magnet / ed2k 链接也会自动改指向新客户端。

有几件事值得留意:

  • 局域网配对协议升级到 v2,两台设备需要一起升级。
  • 已保存的站点凭据需要重新输入一次。
  • 浏览器扩展请与桌面端一起更新,否则可能显示「未连接」。
  • Windows 安装包暂未签名,首次运行时系统可能会提示风险。
  • Android 版仍基于 Flutter,继续随下载引擎一起更新。

§ 07

最后,谢谢你

重写一个已经能用的软件,是一件很冒险、也很孤独的事。支撑我走完这段路的,是每一条 issue、每一次投票、每一句「好用」。

FluxDown 依然免费、开源、没有广告。如果新界面让你眼前一亮,告诉我;如果哪里不顺手,更要告诉我——下一个版本往哪走,由你来决定。

—— FluxDown 作者

页面
操作
↑↓选择打开