打开网易新闻 查看精彩图片

一个API请求触发21次数据库调用。代码看起来毫无破绽,遥测数据却像在报警。

这是Aquil Abdullah最近遇到的真实案例。他在调试后端时发现了这个反直觉的现象:AI生成的代码本地运行完美,上线后却悄悄变成性能杀手。

漂亮的代码,隐蔽的漏洞

漂亮的代码,隐蔽的漏洞

Abdullah的团队正在开发一个用户资料接口。需求很简单:返回用户基本信息、运动偏好、帖子列表和活动记录。

AI助手给出的实现堪称教科书级别——每个函数职责单一,代码清晰易读,测试起来毫无压力。从本地正确性角度看,这是好代码。

但系统行为视角暴露了问题。四个辅助函数各自独立查询数据库,原本一次能搞定的事,硬拆成了四次往返。更糟的是,这种模式在特定场景下会指数级恶化。

这就是经典的N+1查询问题。先批量取用户列表,再循环查询每个用户的关联数据。10个用户变成11次查询,100个用户变成101次。单次查询很快,叠加起来就是灾难。

AI工具擅长生成"局部正确"的代码,却不自动考虑跨层影响——数据库往返次数、缓存策略、并发场景下的资源竞争。

遥测数据不会撒谎

遥测数据不会撒谎

Abdullah花了好一会儿才定位问题。代码表面毫无异常,但遥测日志暴露了真相:

21:15:40 GET /sports

21:15:40 GET /users

21:15:40 GET /event_rsvps

打开网易新闻 查看精彩图片

21:15:41 GET /sports

21:15:41 GET /users

21:15:41 GET /event_rsvps

同一批资源被反复请求。代码整洁得像样板间,系统却在背后疯狂加班。

这个案例戳中了"氛围编程"(Vibe Coding)的软肋——开发者越来越依赖AI生成代码,却容易忽略运行时行为的验证。本地通过单元测试,不等于生产环境没问题。

Abdullah的解决方案是把工作推给数据库。用数据库RPC(远程过程调用)替代多次应用层调用,让数据库一次性组装完整结果。改造前是"API→多次数据库调用",改造后变成"API→单次RPC→数据库组装结果"。

工具链的缺口

工具链的缺口

这件事最讽刺的地方在于:AI能写出漂亮的代码,却不会主动告诉你"这段代码在生产环境会打21次数据库"。

现有的AI编程助手缺乏对系统级行为的感知。它们不连接遥测系统,不理解历史性能基线,更无法预测代码变更对基础设施的影响。开发者拿到的是孤立的代码片段,而非完整的工程决策。

Abdullah在原文中提出了一个开放性问题:如果AI工具能实时读取应用的遥测数据,在生成代码时就预警潜在的性能陷阱,"氛围编程"会不会变得更可持续?

这不是要否定AI编程的价值。而是提醒一个事实:代码的整洁性和系统的健康度,有时候是两条平行线。当生成代码的成本趋近于零,验证代码行为的成本反而在上升。

他最后记录了一个细节——修复后的接口响应时间从数百毫秒降到两位数,数据库CPU使用率曲线变得平缓。但团队花了整整一个下午,才从21次查询的迷雾中找到出口。

如果AI助手在生成那段"漂亮代码"时,能同步弹出提示:"检测到潜在N+1查询模式,建议改用JOIN或批量查询"——这个下午本可以省下来。问题是,现在的工具链还没走到这一步。