做自己的软件有个好处:发现走弯路的时候,只要自己下得去手,随时可以推倒重来,不用背历史包袱。2026 年 9 月下旬,观澜的界面就经历了一次连换三套方案的折腾。

为什么我把刚写好的自由拖拽仪表盘全删了

9 月 19 日那会儿,我引入了 IBM 的 Carbon Design System,还兴致勃勃地写了一套可以自由拖拽、自由缩放格子的自定义 Widget 仪表盘。当时觉得“让用户自己排监控卡片”听起来很酷。

结果自己真正用了不到一周就受不了了:硬件监控软件最核心的诉求,是出问题时点开页面一眼就能在固定位置找到对应指标。花里胡哨的自由拖拽经常在换个屏幕分辨率后把折线图挤变形,而且为了存这些格子坐标,后端还得专门多维护一堆布局表。于是在 9 月 25 日(v3.0.105,Commit 56fc103),我毫不犹豫地把整套拖拽编辑器代码全删了,回归确定性的高密度专业看板。

净删 123 个依赖包,换上 M3 Expressive 与纯自绘 SVG

砍掉拖拽之后,看着项目里依然臃肿的 @carbon/react 和 @carbon/charts-react,我决定干脆清理到底。Carbon 的图表库打包体积巨大,样式覆盖起来又极其拧巴。

到了 9 月 30 日(v3.0.138 至 v3.0.141,Commit 159ee32),我把 Carbon 相关的包连根拔起——这一下直接从 node_modules 里净删了 123 个 npm 依赖包和 1730 行兼容样式。取而代之的是一套基于 HCT 色彩空间调色板的 Material 3 Expressive 界面,所有实时曲线、面积图和环形仪表盘全部改用零第三方依赖的纯自绘 SVG 引擎重写,体积轻巧,渲染帧率也稳得多。

Android 端全面转向三星 One UI 风格

在桌面与 Web 端换血的同时,手机端也没闲着。9 月 26 日(v3.0.108),我按照三星 One UI 的交互规范把 Android 客户端完整重建了一遍:顶部做了方便单手够到的大标题下拉折叠区域,圆角卡片与胶囊指示器全部对齐系统视觉,还加上了顺滑的 Android 原生预测式返回手势(Predictive Back)。