游客发表
凌晨两点,定位端还我盯着屏幕上一张裂开的后端图片,后端同事在群里发了一句:“我接口返回的定位端还数据是好的。” 前端同事立刻接上:“我这边渲染逻辑也没问题。后端” 两个人谁都不背锅,定位端还但线上就是后端坏了。这种时刻,定位端还比写代码本身更考验人。后端
定位bug归属,定位端还最蠢的后端办法是吵。最有效的定位端还办法是看数据流在哪一步断了。我自己的后端经验是——先别急着翻代码,打开浏览器开发者工具,定位端还直接看Network面板。后端请求发出去了吗?定位端还状态码是多少?返回体长什么样?这一步能过滤掉一半的“假前端bug”。
有一次,用户反馈列表页白屏。我打开Network,发现接口返回200,但response里是HTML而不是JSON。后端同事说“我本地测过没问题”,可实际上他部署的时候把路由配置错了,静态资源请求打到了后端接口上。这算谁的bug?严格说,是后端部署配置的问题,但前端如果做了响应类型校验,也不至于白屏。你看,边界有时候是模糊的。
再往下走,如果接口返回正常,数据格式也对,但页面还是不对,那就得看渲染层。把接口数据手动复制到本地,写个最小复现demo。如果demo能正常显示,说明问题出在真实项目环境——可能是状态管理混乱,可能是组件生命周期时序问题,也可能是某个全局样式干扰。这时候,前端就赖不掉了。
但有个坑我踩过好多次——“看起来像前端”的bug,根因在数据精度。比如后端返回一个超大整数ID,前端用JavaScript的Number类型去存,精度丢了,数字变成科学计数法,点击跳转时ID对不上。前端代码写得再干净也没用,因为JS的Number就是只能安全表示到2^53-1。这种问题,后端得把ID改成字符串返回,或者前端用bigint解析。谁改?得看谁更愿意维护长期契约。
还有一类更隐蔽的——时序问题。后端接口本身没问题,但前端同时发了两个请求,第二个请求依赖第一个请求的响应。如果第一个请求慢了,第二个请求拿到的是旧数据,页面就闪一下错误状态。这种bug,后端看日志全是200,前端看代码也没写错,但就是偶发。这时候你需要在Network里看请求的waterfall,看是否出现竞态。
我的个人判断标准很简单:如果bug能在接口层被复现,那就是后端的;如果接口数据没问题但UI表现异常,那就是前端的。但现实里,至少有30%的bug是“协作bug”——后端没跟前端对齐字段类型,前端没处理后端的历史遗留字段,或者文档写的是A,实际返回的是B。
所以,与其问“这是谁的锅”,不如问“怎么快速让用户不受影响”。我通常的做法是:先在前端加一层防御性代码,把页面救起来,然后再拉着后端一起看日志。等线上稳定了,再讨论谁改更合理。这听起来有点和稀泥,但工程本身就是妥协的艺术——毕竟凌晨三点,用户只想看到页面正常,不想看你们技术团队分锅。
最后说个实操技巧:如果你们有日志系统,直接搜用户操作的时间点,对比后端接口日志和前端console报错。前端报错往往带堆栈,后端报错带traceId。把traceId和前端请求头对上,就能精准定位。要是连日志都没有,那这bug根本没法定位——你们得先修的是可观测性,而不是代码。
友情链接