站长评论失焦?系统维护员的科技冷思考
|
跟产品吵。我原以为是前端把焦点管理写崩了,结果盯着 DevTools 里那堆 tabindex="-1" 看了四十分钟,发现根本不是 tabindex 的事——是站长评论区那个「加载更多」按钮被 click 事件劫持了三次,第三次才触发 focus 回调,但回调里又顺手把 document.activeElement 给 reset 了。PM 在会议室白板上画了个带箭头的圆环说“这是用户心智闭环”,我差点把键盘推到她手边让她自己点三下试试。 Lighthouse 跑分截图发到群里没人回。我截的是实测数据:首屏可交互延迟二十一毫秒,比去年同版本快了四倍多,但「站长评论失焦」这事在内部工单系统里挂着橙色标签半年没动过。上周五下午三点,后端老张过来借充电器,我顺手把线递给他,他换的那根是紫芯镀镍的——跟原来那根差十七欧姆阻抗,插进 MacBook 那瞬间风扇转速变了半格,我居然盯着看了七秒。后来发现这和失焦无关,但那天之后我就再没信任过 USB-C 口的电压稳定性。 优胜劣汰。不是嘴上说说。前年上线那版评论弹窗,刚跑完灰度就崩出三百多个 focusout 意外触发,日志里全是从 iframe 里冒出来的 event.target 为空。当时我直接切到生产库,用 redis-cli 扫描所有 session:comment: key,发现其中十七个存着上古时期的 document.hasFocus() 返回值缓存。删掉。重启 nginx。没提 PR。没人问。三个月后新来的前端查埋点时翻出来,问我「这个键名是不是写错了」,我说「没写错,它活着,只是不呼吸」。 我敢打包票:评论框第一次点击必失焦,第二次点才能聚焦,第三次点才会触发 autocomplete 下拉。但为什么是三次?我说不准。试过改 preventDefault、试过加 setTimeout 包裹 focus()、试过把 input 移到 shadow DOM 里再塞回去……最后发现只要在点击后立即调用 getSelection().removeAllRanges(),就能卡住第二次焦点。但这样会导致 iOS 上双击选词失效。于是我们保留了这个 bug——因为双击选词的埋点覆盖率只有百分之六点三,而「点击评论框」的覆盖率是八十二。数据不会撒谎,数据也不会眨眼。 桌面那个没关的录屏还在跑。昨天录的是 CDN 账单异常波动,峰值出现在凌晨两点零七分,持续十八分钟,带宽涨了三百七十二 KB/s。技术上是个边缘节点配置漂移,但财务侧硬说是「营销活动预热」,把费用摊进了 Q3 社媒预算。现在账单邮件标题里还写着「建议优化缓存策略(非紧急)」,括号里那个「非紧急」是我上周五下班前手敲补上的,发出去两小时,PM 回了个 ???? 表情,没看内容。
文章配图,仅供参考 勾选合并请求。不是点一下 merge 就完事。第一步得先 git checkout -b fix/focus-sticky-2024Q3;第二步要删掉 node_modules/.cache/next/development/_next/static/chunks/pages/comment/xxx.js.map 里的 sourceMappingURL 注释行(不然 sourcemap 会漏掉一行 event.path 的路径追踪);第三步才是 GitHub UI 里点那个绿色按钮。但这三个动作之间隔了三天——因为第二天运维在重装 K8s 控制面,第三天 CI 流水线卡在了某个 npm registry 的中间证书校验失败。我其实早该把 patch 直接打到线上镜像里的,但怕 devops 看见我绕过 pipeline 会记小本子。结果就是现在所有新发布的评论组件里,都带着一个「点击三次才聚焦」的彩蛋。 谁去倒水?前端小陈。他每天十点二十准时站起来,绕过我的显示器后面,打开饮水机右下角第二个龙头——那个水流最稳、水温恒定八十六度的口。我观察过,他从不碰左边那个,说那边管路锈了,上次接水杯底有一层浅褐色水垢。这跟我修过的三台 A/B 测试网关有相似逻辑:你永远不知道哪个冗余路径才是真正的主干道。 反常识结论来了:失焦不是缺陷,是过滤器。用户能忍三次点击,说明真想评论;忍不过两次的,多半是误触或者路过看热闹。KPI 折算表里没这一项,但真实转化率曲线在失焦后陡升百分之四十一。上个月我把这个数据扔给增长组,他们反问我「有没有控制变量?」我说「没有,我们连用户停留时间都是用 window.onblur 触发的,本身就不准」。对方愣了三秒,然后说「这数据我们不敢报」。我不怪他们。我也不敢——我上周刚把某条 error 日志的上报等级从 ERROR 降到了 WARN,因为再往上,Sentry 告警就会联动触发 P0 级工单自动分派。不是我不想修,是修了之后监控更吵。 下一步?我打算下周找个晚上,把 comment.js 里那三段 focus 管理代码用注释框起来,留着。加一行 // keep for survival bias —— 然后提交。要是哪天有人真删了它,我会知道这个人要么刚来,要么准备走人。至于失焦本身?等下次重构时再议。现在先让它活久一点。毕竟它比我上次升职早半年。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


