一、深夜调试:从模型输出到Web前端的“最后一公里”凌晨两点,实验室的服务器风扇嗡嗡作响。RT-DETR模型在测试集上跑出了98.7%的mAP,推理速度也压到了23ms/帧,一切看起来都很完美。直到我把检测结果往Web页面上推——浏览器卡成了幻灯片,Chrome的内存占用直接飙到2GB。“模型都优化完了,怎么卡在展示环节了?”这是我当时最真实的困惑。后来发现,问题出在数据序列化和传输上:我们习惯性地把每帧的检测结果(几十个目标,每个目标带类别、坐标、置信度)直接JSON.stringify后通过WebSocket推给前端。单帧数据不大,但每秒25帧的实时流,加上前端没做渲染节流,DOM操作直接压垮了浏览器。这个坑让我意识到:算法工程师常把“部署”简单理解为模型转换和接口封装,但真正的工程落地,从数据离开模型到最终用户看到可视化结果,中间还有无数细节要打磨。二、技术选型:为什么是FastAPI + Socket.IO + Vue3最初考虑过Flask + HTTP轮询的方案,简单粗暴。但在真实交通监控场景下,摄像头输入是25fps,HTTP请求的 overhead 太大,延迟明显。也试过纯WebRTC推流,但需要同时传输视频流和结构化检测结果(框、标签、轨迹),协议设计复杂。最终敲定的技术栈:后端:FastAPI + Python-SocketIO