第55章 技术攻坚 初见曙光

杨雨薇合上电脑,屏幕的微光在她脸上缓缓隐去。

窗外,天色灰蒙蒙的,远处的城市轮廓被晨雾轻柔地包裹着,模糊难辨。

旅馆的空调还在低低作响,赵磊靠在床头,指间夹着记号笔,双眼紧闭,呼吸很轻,显然还未睡沉。桌上两台笔记本并排开着,充电线缠在一起,像昨夜讨论时谁也没顾得上理清的思路。

高兰芝整理的会议记录折成小方块压在枕头下,欧阳娜娜的手机贴在墙角充电,屏幕朝内。杨雨薇起身,拉开窗帘,阳光从云缝里漏下来,照在桌角那份《试点教学方案初稿》的打印件上。纸页边沿有些卷曲,是昨天反复翻动留下的痕迹。

她打开自己的电脑,新建文件夹,命名为“凤凰试点-技术适配”。光标闪了两下,她开始输入第一行字:“目标:支持0.8Mbps以下带宽环境,终端内存占用不超过1.2GB,单节课流程全程离线可运行。”

“昨晚我一直在琢磨田校长那句话——‘设备堆在仓库吃灰’。”他声音略显沙哑,神情认真,“我们不能做个只跑通演示的系统就完事。”

“那就从根儿上改。”杨雨薇语气坚定,“不能再依赖云端调度了,所有核心功能都得本地化。”

两人对视一眼,没再多话。他们收拾好行李,退房,搭上返程的大巴。车行一路,山势渐远,城市轮廓越来越清晰。回到创业工坊已是下午三点。阳光斜照进玻璃门,落在长桌上未收的图纸和空水瓶上。杨雨薇推开窗通风,赵磊打开投影仪,把调研数据调出来。

技术团队成员陆续到齐,共六人,都是清华软工系的同学。有人背着双肩包,径直坐下;有人则起身去接水。杨雨薇走到白板前,写下三个数字:“5Mbps、2小时、4GB”,随后转过身来。

“这是凤凰县民族中学的实际网络条件。”她说,“平均网速不到五兆,每天断网超过两个小时,终端内存普遍不足四G。我们现在的系统,在这种环境下根本跑不通。”

会议室安静下来。有人低头看笔记,有人用笔敲桌子。

“所以,”赵磊接过话,“我们必须放弃‘实时同步’‘动态加载’这些设计。从今天起,走‘极简架构+离线优先’路线。”

他走到电脑前,打开系统框架图。“第一步,剥离所有云端依赖模块。学习内容打包成静态资源包,提前拷贝进机房电脑。操作流程压缩到四个步骤:进入、选择、播放、提交。每一步都不能卡。”

“语音讲解要能断点续传。”杨雨薇补充,“哪怕中途断网,学生也能接着听,不会重头再来。”

有人问:“那数据怎么保存?”

“本地缓存。”赵磊说,“每次操作都写入本地数据库,等网络恢复后再批量上传。我们加个状态提示,让学生知道‘已保存,待同步’。”

“界面也得改。”另一个同学说,“现在的按钮太多,图标太花,农村老师看着就头疼。”

“那就只留三个主按钮。”杨雨薇说,“开始、重听、提交。字体放大,颜色对比拉高,方便视力不太好的学生看清楚。”

“还有响应时间。”赵磊指着测试日志,“现在加载一道题平均三点八秒,在低网速下可能超过十秒。必须压到两秒以内。”

“可以试试压缩算法。”杨雨薇打开一份文档,“我查了资料,数学公式和语音讲解占了资源体积的七成以上。如果能找到合适的轻量级编码方式,能把单课内容压到原来的五分之一。”

“没听说过这个协议。”一个戴眼镜的同学皱眉。

“是我根据已有算法整合优化的。”杨雨薇说,“还没命名正式标准,暂时叫LMC-8。我已经写了初步实现逻辑,你们可以看看。”

她把文档共享出去。大家低头阅读,房间里只剩键盘敲击声和翻页声。

“可行。”赵磊看完后说,“我来负责重写传输协议,配合断点续传机制。一旦连接中断,自动记录位置,恢复后从断点继续。”

“我来做资源打包工具。”另一个同学说,“把题目、解析、语音全打成离线包,支持U盘导入。”

“界面组今晚出新版原型。”赵磊分配任务,“明天上午十点前完成交互测试。”

“数据库这边我也跟进。”有人应道,“本地存储结构要重新设计,避免频繁读写拖慢速度。”

杨雨薇点头:“所有人今晚通宵,先把基础框架搭出来。明天一早,我们做第一次模拟测试。”

没人反对。水瓶被重新灌满,外卖订单发出去,咖啡机开始工作。白板上列出任务清单,每人认领一块。杨雨薇坐在主位,盯着屏幕上的代码结构图,手指在触控板上滑动,不断调整模块边界。

深夜十一点,第一版简化系统完成。赵磊启动模拟环境,设定网速为3Mbps,随机断连两次,每次三十秒。测试开始。

第一个环节顺利通过。学生登录,选择课程,加载题目,响应时间控制在两秒内。

第二个环节出现问题。语音解析播放到一半,网络中断,系统尝试重连失败,返回首页,进度丢失。

“不行。”赵磊摇头,“不能让用户重头再来。”

“加个本地快照。”杨雨薇说,“每次播放开始时自动保存一次状态,断网后优先恢复快照。”

“还要提示用户。”有人补充,“弹个框,写‘网络不稳定,已保存进度’。”

修改持续到凌晨两点。新版本上线,再次测试。这次断网后系统成功恢复播放位置,但音画不同步,延迟达到1.8秒。

“压缩太狠了。”负责音频的同学说,“语音帧被过度裁剪,导致播放节奏错乱。”

“那就调整编码参数。”杨雨薇调出波形图,“保留关键语义节点,比如‘所以’‘因此’‘注意’这类提示词,前后多留半秒缓冲。”

“还可以预加载下一题。”赵磊说,“趁着学生答题的时候,后台悄悄下载下一道题的资源,减少等待。”

“但内存有限。”有人提醒,“不能同时载入太多内容。”

“那就按需加载。”杨雨薇说,“只预载一道题,且必须是学生大概率会选的。我们可以根据班级历史数据做简单预测。”

“现在没有历史数据。”赵磊说。

“那就用通用优先级。”她说,“代数优先于几何,计算题优先于证明题,常见考点优先于冷门知识点。”

“行。”赵磊记下,“我加个权重调度器。”

新一轮修改开始。杨雨薇去洗了把脸,回来时看到赵磊正趴桌上画流程图,手边是半杯冷掉的咖啡。她坐下,继续调试LMC-8的参数配置。

第二天早上八点,第二轮模拟测试开始。网速设为1.5Mbps,断连三次,最长一次一分二十秒。十道题全流程跑完,除第一次加载稍慢外,其余环节均顺畅完成。语音同步良好,断网恢复迅速,提交记录完整。

“有进步。”赵磊说,“但还不够稳定。刚才第七题加载用了2.7秒,超了上限。”

“问题出在资源包结构。”负责打包的同学说,“我把所有语音合成在一个文件里,导致解压时间变长。”

“拆开。”杨雨薇说,“每道题独立打包,互不依赖。这样即使某一题损坏,也不影响其他题目。”

“还要优化解压算法。”赵磊说,“用轻量级zlib替代原生解压库。”

“我来改。”那人点头。

中午饭匆匆吃完,下午继续攻坚。杨雨薇发现公式渲染仍有卡顿,尤其是在老旧显卡上。她重新设计符号解析逻辑,把复杂公式拆解为可逐行显示的步骤序列,降低瞬时计算压力。

赵磊则专注于传输协议。他引入分段校验机制,每一段数据传输完成后立即验证完整性,若出错只重传该段,而非整块资源。这大大减少了流量浪费。

第三天,系统在0.8Mbps极限环境下完成全流程测试,响应延迟稳定在1.5秒内,语音播放流畅,断网恢复成功率百分之百。

“成了。”有人低声说。

但杨雨薇没放松。“再测一遍全链路。”

第四天清晨,最后一次模拟测试启动。环境设定为:网速0.8Mbps,随机断连四次,最长断网两分钟,终端内存占用限制为3.5GB。系统从登录到提交全程跑完,无崩溃、无卡顿、无数据丢失。语音与文字同步精准,手动快照功能正常触发,本地缓存完整记录所有操作。

“延迟1.2秒。”赵磊看着监控面板,“达标了。”

房间里安静了几秒,然后不知谁先笑了起来。有人兴奋地拍着桌子,有人站起身来伸了个大大的懒腰,还有人趴在桌上,似乎已耗尽了所有力气。一个女生摘下眼镜,轻轻揉着眼睛,另一个男生则把头埋进臂弯里,肩膀微微抖动,似是在无声地宣泄着疲惫与喜悦。

杨雨薇轻轻靠在椅背上,闭眼片刻,再睁开时,眼中闪烁着坚定。她看向赵磊,发现他也正望着自己,嘴角扬起一抹温暖的微笑,手里还紧紧捏着调试日志。

“可以交给试点了。”他说。

“还得再检查一遍安装包。”她站起身,“确保在二手电脑上也能顺利安装。”

“我已经做了兼容性列表。”有人递过表格,“覆盖市面上二十款老旧机型,最低支持Win7系统。”

“打印一份。”她说,“我们带过去,现场装机时对照用。”

赵磊打开最后一个文件夹,里面是全部技术文档、部署指南、故障排查手册。他逐一核对,确认版本号一致,签名齐全。

“都齐了。”他说。

杨雨薇坐在电脑前,打开邮箱,准备起草发送给田校长的技术说明。光标停在收件人栏,她没有立刻填写。

窗外,阳光穿过云层,照在工坊的玻璃墙上。桌面上散落着空水瓶、草图纸、写满笔记的便签。有人已经开始收拾背包,有人还在低声讨论某个细节优化。

赵磊靠在椅子上闭眼休息,调试日志摊在腿上。技术团队成员陆续停下工作,有的趴在桌上睡着,有的小声交谈,没人离开。

杨雨薇没有点击发送。她只是静静地看着屏幕,确认最后一行测试报告写着:“系统在极低带宽环境下表现稳定,满足实地部署前提条件。”

她合上电脑。