网页
综合
更新时间 2026-11-13 22:14:29
给 AI 腾内存?Discord 抛弃Electron,省70%内存还秒开:Windows应用该跟进了 - InfoQ
自动蜘蛛
www.infoq.cn
正文约 3817 字
Discord正以Rust重写全平台客户端,桌面端弃用Electron、移动端弃用React Native,新客户端“Phoenix”内存占用降至290MB(原版超1GB),并引入WASM替代JS处理核心逻辑。
Rust重构显著降低内存占用与启动延迟;移动端响应速度达当前最优水平;核心逻辑迁移至WASM,兼顾性能与跨端一致性。
适合客户端架构师、前端性能工程师、Rust技术决策者阅读。
近日,Discord 联合创始人兼 CTO Stanislav Vishnevskiy 在 X 上宣布,Discord 正将客户端迁移至 Rust,桌面端将移除 Electron,移动端也将放弃 React Native。他展示的 Windows 任务管理器截图显示,新客户端以“Discord Phoenix”的名称运行,内存占用约 290.2MB。相比之下,现有 Windows 客户端在加入多个服务器后,内存占用很容易达到 1GB 甚至更高。Vishnevskiy 随后补充称,截图中的客户端同时运行着两个账户。
“新版 Discord 客户端内存占用更低,这还只是其中一点。点击操作流畅无比,我再也回不去了。看看启动速度就知道了。”Vishnevskiy 展示了新版客户端的效果:
“我觉得它现在可能是我手机上响应速度最快的应用了。”Vishnevskiy 还展示了移动端效果:
之后,有网友询问网页客户端的变化,Vishnevskiy 回答道,“我们会有一个 HTML 渲染器,但逻辑系统将采用 WASM 而非 JS。”
目前,Discord 尚未公布正式上线时间,只表示希望尽快开放用户测试。
“恭喜你们终于发现 Vibe Coding 了。”有网友在 Vishnevskiy 帖子下评论,他没有正面回应。不过,Discord 工程副总裁 Mark Smith 早在 3 月份就公开介绍过公司的内部 AI 开发平台 Vibeyard。按照他的说法,Discord 员工过去需要几天甚至几周才能交付一款内部应用,如今通过 Claude、CLAUDE.md、GitHub Actions 和 Cloudflare 基础设施,约两分钟就能完成部署。
因此,对于这次重构,大部分人认为是 AI Coding, 不过官方没有明确这一说法。
2025 年 10 月,Discord 针对 Windows 客户端启动专项排查。到当年 12 月,团队已经修复至少 9 项与内存泄漏、死锁、缓冲区溢出等有关的问题,还增加了遥测和内存分析工具。
但问题并没有彻底解决。Discord 披露,客户端正常使用时内存通常低于 1GB,部分用户却会遭遇超过 4GB 的异常占用。一些问题甚至涉及操作系统、驱动程序和硬件,团队需要与外部合作伙伴共同定位。
经过一轮修复,Discord 将内存占用的 P95 降低了约 5%,但对于长期运行、频繁切换频道和服务器的用户来说,这还远远不够。
2025 年底,Discord 工程团队在 Reddit 解释了这项特殊的性能实验。当 Windows 客户端内存占用超过 4GB 时,程序可以在用户离开电脑后自行重启,以缓解持续增长的内存压力。为了避免干扰用户,Discord 设置了严格的触发条件:客户端必须运行至少一小时、用户处于离开状态、没有进行语音通话,每天也只能重启一次。团队希望借此缓解部分用户的内存压力,同时收集更多异常数据。
Discord 当时明确表示,这只是临时措施,不是解决内存问题的长久之计。
当时,这项决定在社区引发了讨论。一些用户认可 Discord 主动处理问题,但也有人认为,一款聊天软件需要靠自动重启控制内存,本身就足以说明客户端的性能问题已经相当严重。
随后,Discord 继续沿着原有技术路线优化。今年 9 月 8 日,Discord 公布了一轮性能改进:桌面端升级至 Electron 42,调整部分调用方式后,CPU 占用中位数下降约 17%,但内存占用中位数反而增加约 4%。
移动端也进行了类似的优化。React Native 版本升级后,Android 和 iOS 应用的平均 CPU 占用下降约 5%,平均启动时间缩短约 5%。
这些数据说明,Discord 并非没有尝试过优化 Electron,也不是因为一次性能问题突然决定重写客户端。相反,团队已经持续投入大量工作,但在原有架构下,不同性能指标之间仍然存在取舍。
对于 Discord 这样的产品,问题尤其敏感。它经常在用户运行游戏、直播或共享屏幕时保持后台在线。聊天客户端多消耗的 CPU 和内存资源,可能直接挤占游戏和其他应用的运行空间。
Discord 拿出了一套更彻底的方案:放弃 Electron,用 Rust 重写整个客户端。
Rust 并不是 Discord 临时选中的一门新语言。
Vishnevskiy 表示,公司早在 2018 年就开始采用 Rust。目前 Discord 的大量基础设施、语音技术和部分现有客户端代码已经使用 Rust 开发,将整个客户端迁移过去一直是团队希望实现的目标。
早在 2020 年,Discord 还专门发表过一篇工程文章,解释为什么将一项核心后端服务从 Go 迁移至 Rust。这项服务名为 Read States,负责记录用户读过哪些频道和消息。Discord 需要处理数十亿条已读状态,服务每秒涉及大量缓存更新和数据库写入,属于典型的高频访问场景。
当时的 Go 版本大多数时候运行很快,但几乎每隔两分钟就会出现一次明显的延迟峰值。工程团队排查后发现,问题与垃圾回收器(GC)扫描大型 LRU 缓存有关。
Discord 尝试过调整垃圾回收参数、缩小缓存规模等办法,但缩小缓存又会导致更多数据需要从数据库读取,反而影响尾延迟。团队最终决定用 Rust 重写这项服务。
Rust 通过所有权机制在编译阶段管理内存访问,不依赖传统垃圾回收器。迁移后,缓存中的对象可以在不再使用时及时释放,原有的周期性垃圾回收延迟问题也得到解决。Discord 还利用 Rust 版本进一步调整了缓存结构和容量,提高了服务整体性能。
不过,这次迁移并不是毫无代价。Discord 当时也提到,早期 Rust 异步编程生态还不够成熟,开发团队需要解决额外的技术问题。对于规模较大的系统,语言迁移需要考虑的远不只是运行效率。
这段经历为此次桌面客户端重构提供了背景。Discord 已经积累了多年 Rust 开发经验,也验证过 Rust 在高频、低延迟业务中的价值。
Discord 这次真正引人关注的技术选择,是 GPUI。
在 Vishnevskiy 公布重构计划后,有开发者猜测 Discord 会采用 Tauri。Tauri 同样以 Rust 为核心,但它通常使用操作系统提供的 WebView 渲染界面,开发者仍然可以沿用 HTML、CSS 和 JavaScript 技术栈。这种方案能够减少 Electron 携带完整 Chromium 运行环境带来的部分开销,同时保留 Web 开发的便利性。
但 Vishnevskiy 明确表示,Discord 没有采用 Tauri,而是选择了 GPUI。
GPUI 最初由 Zed 编辑器团队开发,是一个基于 Rust、利用 GPU 加速渲染的界面框架。与将 Web 界面装进桌面应用不同,GPUI 允许开发者直接用 Rust 构建界面和交互逻辑。
Discord 的目标并不是让新版本看起来像另一个产品。Vishnevskiy 表示,新客户端的外观和功能将基本保持不变,但应用本身会采用原生实现,仅在 YouTube、Activities 等特定功能中使用系统 WebView。
GPUI 也并非拿来就能直接满足 Discord 的需求。一位参与此次重构的 Discord 开发人员透露,团队以 Zed 的 GPUI 为基础进行了大量修改,目前使用的版本实际上已经接近一个私有分支。Discord 希望未来与 Zed 合作,将部分改动贡献回上游项目。
“从一开始,Discord 的 iOS 端就是用 React Native 开发的;安卓端几年前也迁移到了 React Native,目的是抹平两端差异,安卓版之前在功能上一直落后于 iOS 版本。”Vishnevskiy 说道。
如今,Discord 准备逐步移除 React Native,但不会简单地把桌面界面搬到手机上。按照 Vishnevskiy 的说法,iOS 和 Android 仍然保留各自的原生界面,通过 Rust 与桌面端共享核心应用代码。
但 Rust 和 GPUI 并不是没有成本的选择。
首先,Rust 的内存安全机制能够帮助开发者避免大量内存错误,但不能自动消除业务逻辑导致的内存泄漏、资源缓存过大或 GPU 显存占用问题。客户端最终消耗多少资源,仍然取决于整体架构和代码实现。
其次,GPUI 的生态成熟度与 Electron、成熟的浏览器技术栈仍存在差距。Discord 需要自行维护大量平台适配工作,包括输入法、文本选择、窗口管理、辅助功能和操作系统集成。采用经过大量修改的 GPUI 分支,也意味着团队未来需要持续承担框架维护和版本同步成本。
本页为82搜索生成的网页快照,内容来自站内索引;演示数据的原文链接仅作示例。