三台测试机屏幕刚暗下去三秒,又亮了起来。这次不是欢迎界面,而是并排滚动的压测日志。刘好仃把手机塞回裤兜,没看小吴那条“同步完成”的消息,只说了句:“再跑一遍,十轮复合场景,记录每一帧响应时间。”
小李正伸手去拿水杯,听见这话手一抖,半杯凉茶泼在桌角。他没擦,盯着深圳机的进度条:“刚不是全绿了?连宁波的线程都稳了,还压?”
“绿了是能走。”刘好仃敲了敲白板上“闭环已成”那四个字,“但走得顺不顺,得听脚步声。”
小吴从笔记本后探出头:“我刚看了,延迟最高0.6秒,用户根本察觉不到。”
“人察觉不到,手会。”刘好仃调出凌晨三点东莞机的日志,“这里,连续三次导出提醒间隔被拉长0.4秒,队列开始堆积。像走路时鞋里进了沙子,一开始没事,走十里就磨出血。”
他把画面定格在一处调度记录上:“系统学会了等,但等的节奏乱了。它该喘气的时候憋着,该迈步的时候拖脚。”
办公室静了两秒。小李低头看自己电脑,忽然发现前端渲染时间那一栏,确实有几处微妙的凸起,像平静水面下藏了半截断枝。
“那就……再抠抠?”小李试探着问。
刘好仃点头,拿起记号笔,在白板最上方画了条横线:“从今天起,标准改了。0.3秒是生死线,超一毫秒,算缺陷。”
小吴张了张嘴,最终把面包塞回嘴里,含糊道:“行,反正早餐还没吃完。”
十点十七分,第十八轮模拟开始。深圳机进入高频操作模式,导出、切换、报警三线并发。画面流畅,但小李回放视频时,发现提醒弹出前有极短的界面抖动。
“像是闪了一下。”他说。
刘好仃没答,掏出手机,对着屏幕开慢动作拍摄。画面放大后,所有人看清了:弹窗出现前,有一帧极短的黑边,几乎无法察觉。
“重绘开销太大。”刘好仃指着前端代码,“每次弹窗,样式表全加载一遍,像每次出门都重新穿鞋带。”
小李挠头:“可我们之前做了缓存啊。”
“缓存了主体,没缓非核心样式。”刘好仃标出几行cSS,“这些动画过渡、阴影效果,工人用不着,但它每秒偷偷吃掉15毫秒。”
“删了?”小李问。
“留个影子。”刘好仃改了两行代码,“只保留基础边框和字体,视觉上还是那个提醒,但轻了三分之二。”
代码推送后,第二十轮测试启动。三台机器同步运行,界面再无抖动。小吴盯着性能监控图,发现前端资源占用从18%降到6%。
“省下的时间够打个哈欠。”他说。
“够它喘匀了。”刘好仃说。
中午前,刘好仃把近五轮所有误触发记录调了出来。屏幕上列出十几条“回头即降级”的案例。他一条条过,忽然停在一条记录上:操作员转身45度,视线停留0.7秒,系统判定为“防查岗”,压住了导出提醒。
“角度不够,时间不够,紧张度也不够。”他圈出数据,“它把习惯当信号了。”
小吴翻模型日志:“可标签库里,‘回头’本身就是高危动作。”
“但人回头,可能是找水杯,可能是看窗外飞鸟。”刘好仃在本地库新建一个字段,“加个‘动作置信度’,低于70分的,不进高优先级链,只记日志。”
“那它怎么知道分?”小吴问。
“靠组合。”刘好仃列出公式,“角度、时长、后续动作,三项加权。比如回头后立刻操作设备,大概率是工作衔接;回头后停顿、微调站姿,才可能是防查。”
小吴敲了几行代码,跑了个样本。原来误判的12条,现在只剩3条触发降级,其余转入观察池。
“剩下这三个,”刘好仃指着,“明天让东莞老张来录一段真实操作,补标。”
下午两点,宁波测试机日志跳出一条警告:同步信号延迟0.5秒。小李立刻跳起来:“网络又抽了?”
刘好仃摇头:“不是带宽问题,是心跳包太胖,本地时钟没对齐。”
“那升级?”小李问。
“不。”刘好仃打开配置文件,“压缩心跳数据,只传时间戳和状态码;再加个本地补偿算法,网络抖时,系统自己猜半秒。”
“猜错了呢?”
“猜错了,就等。”刘好仃说,“宁可慢半拍,不能乱节奏。像两人并肩走,一个绊了,另一个停下等,别硬拽。”
小吴在测试环境模拟弱网,新机制下延迟波动从±0.6秒收窄到±0.2秒。三地响应曲线几乎重合。
“现在它们不只是同步,”小李看着图表,“是踩着同一个鼓点。”
傍晚六点,刘好仃宣布进行盲测。两套系统交替运行,团队不知道哪轮是优化版。十轮模拟下来,旧版出现两次轻微卡顿,误触提醒5次;新版零卡顿,误触仅1次,且发生在极端复合场景。
小李盯着结果,忽然笑出声:“这哪是升级,是给它做了个肺部SpA。”
刘好仃打开更新日志,在版本备注里写下:“不是让它更快,是让它更懂呼吸。”
他合上电脑,走到三台测试机前。屏幕静默,待机界面干净。他按下重启键。
三台机器同时黑屏,两秒后亮起。欢迎界面跳出,随即进入待机状态。
深圳机屏幕刚稳住,弹出一条提醒:“检测到连续三次导出操作,建议检查数据格式。”三秒后收回。
刘好仃还没开口,东莞机屏幕一闪,同样的提醒浮现。紧接着,宁波机也亮了起来。