计然桌面端平时都是挂在后台一跑好几天不关的。到了 2026 年 10 月中旬,随着我本机 ~/.claude、~/.codex 和 ~/.qoder 目录下的 JSONL 会话日志攒到了好几个 G,桌面端开始偶尔闹脾气:有时候切过去点一下菜单,鼠标会转几秒钟彩球,极端情况下甚至会弹出系统提示“窗口未响应”,而且挂机两天后渲染进程内存会慢慢涨上去。
10 月 16 日到 19 日(v1.2.0 至 v1.2.5),我给桌面端做了一次颜值升级加底层大手术。
macOS Tahoe 原生液态玻璃(Liquid Glass)双材质
在 10 月 16 日发布的 v1.2.0(Commit 6632624)里,我先给 macOS 桌面端接上了 macOS Tahoe 原生的 NSGlassEffectView 液态玻璃(Liquid Glass) 与经典毛玻璃双材质系统。窗口背景能够跟随桌面壁纸呈现通透的折射质感,同时保持 Fluent 2 控件的清晰可读性。
剥离独立 utilityProcess 采集子进程
紧接着在 10 月 19 日(PR #25,v1.2.5,Commit 32e41e5),我集中火力向“窗口卡顿未响应”开刀。一查火焰图原因非常直接:以前全盘扫描 JSONL 日志和自定义时间范围聚合都是在 Electron 主进程(Main Process)里跑的,一旦遇到几百兆的大日志文件,主进程事件循环直接被文件 IO 和 JSON 解析堵死,窗口自然就失去响应了。
我果断把所有耗时的数据采集、增量扫描和历史范围查询逻辑彻底移出主进程,塞进了独立的 Electron utilityProcess(collectorHost.js) 子进程里运行。主进程只负责轻量 IPC 消息转发和窗口管理,哪怕后台正在狂扫几个 G 的陈年日志,前台拖拽窗口、切换视图也丝滑得像什么都没发生一样。
顺藤摸瓜抓出 fast-element 内存泄漏
在排查卡顿的时候,我还顺藤摸瓜抓出了渲染进程内存持续上涨的元凶:项目里用的 @fluentui/web-components 内部依赖了 @microsoft/[email protected],它在组件销毁重绘时有一处订阅没有正确解绑,高频刷新实时数据时就会一直漏内存。我直接用 patches/ 给这个第三方包打上了补丁,同时把 SSE 实时流分包的正则表达式改成了零回溯的线性扫描,桌面端从此连续挂机一周内存依然稳如泰山。