网站上线流量归零?运维盲区正 silently 吞噬用户
|
第九版切图发出去三小时,我正用数位笔描那个状态图标——笔尖刚换过,有点涩,划两下就停住,得换个角度压下去。前端老周在 Slack 里回了个“收到”,后面跟个眨眼表情,然后立刻切去改一个按钮的 hover 动画。我就知道他没点开 zip。果然下午两点他语音进来:“首页首屏白屏三秒?”我敲键盘的手顿了顿,说“啥?”。他那边背景音是短视频外放,“……恭喜解锁新皮肤!”声儿特别脆。
文章配图,仅供参考 我原以为是首屏组件加载太重,查了又查,发现不是。是 Nginx 的 gzip 配置被 Ops 顺手关了——上个月压测完清缓存时,脚本顺带把那行注释掉的 gzip_types 给删了。没人记得,也没人验。上线前连个 curl -I 看 Content-Encoding 都没做。流量归零那天,我们还在群里对齐间距:24px 栅格下那个面包屑的垂直留白到底算 16 还是 20?小陈举着 iPad 对着设计稿比,指甲盖都快贴上屏幕了,说“这里视觉上就是 18”。没人提“昨天 UV 掉了 92%”。色板里那个灰,我一直没问清是 #F5F5F5 还是 #F7F7F7,它在空态和禁用态之间飘了七版。甲方说“要有呼吸感”,我们改了字体大小、字重、行高,最后发现呼吸感卡在缓存头里——Cache-Control: no-cache 被写成 no-store,CDN 拒绝缓存所有静态资源,连 iconfont.woff2 都每次重拉。你猜怎么发现的?是运维小张凌晨两点跑来工位,手里捏着一张便签,上面手写一行:“/static/ 下所有 .js 响应头里,etag 字段拼错了,少了个引号。”我扫了一眼,说“哦,那你修下”,结果他摇摇头:“修不了,前端打包工具自动加的,要你们重打 build。”——可 build 脚本里那行 generateEtag 是我半年前为了过安全扫描加的,当时觉得挺牢靠。 窗台上的绿萝死了半盆,土干裂得像龟背,上周我还看见产品莉莉往里浇过一杯凉茶,说是“提神”。她今天穿那件蓝衬衫,领口扣子崩了一颗,讲话时手指老往上拽。她坚持要把登录弹窗的关闭按钮从右上角挪到左下角,“符合用户心理路径”,我们试了三次,A/B 结果全崩:点击率掉 40%,跳出率翻倍。没人往下挖——后来才发现是那个按钮触发了全局 event.preventDefault(),把页面内所有 click 绑定全吞了。但没人测“点一下空白区域关弹窗”这事儿是否还生效。测试用例文档里写的是“点击 × 按钮 → 弹窗消失”,不写“点别处也该消失”。 桌上那只马克杯,去年十一月份就干了,咖啡渍结成褐色环,在杯壁第三道刻痕那儿停住。我倒过一次水,泡了两天,底儿还是黑的。那会儿正卡在某个 loading 动画的帧率——设计师给的 AE 源文件导出 60fps,实际渲染卡在 32,但看不出毛病,直到用户反馈“转圈圈像卡顿”。我截了帧,发现第 13 帧和第 14 帧之间有个透明像素层闪了一下。没人信。最后是实习生小杨,用 eyedropper 在 Chrome devtool 里逐帧吸色,吸到第 27 帧时喊出来:“这层 mask 的 opacity 是 0.0001,不是 0。”原来 AE 导出插件默认保留亚像素精度。我们重设导出参数,删掉那层,loading 忽然顺了。可那时候流量已经没了。谁还记得? 优胜劣汰不是口号,是服务器日志里一条条 499(Client Closed Request)堆出来的。去年十一月份,没监控告警,没 fallback 页面,没降级开关。只有一张上线检查清单,第三项写着“确认 CDN 缓存策略”,旁边打了个勾——是手写的,笔迹潦草,我看不出是谁签的。现在想,可能就是我签的。我签的时候,正盯着切图文件夹里的命名:login_modal_v3_fix2_new_final@2x.png,底下还压着个 login_modal_v3_fix2_new_final_REALLY@2x.png。命名乱七八糟,可没人动它,因为“能跑就行”。 显示器有点色偏,右边三分之一体积偏青,调过两次 gamma,没用。我早就不信预览色了,全靠截图丢进 Photoshop 里比 LAB 值。昨天发现新版 footer 字体颜色,在我屏上看着是 #333,在老周的 MacBook 上是 #444,差 17 个灰阶。我们吵了八分钟,最后拿 iPhone 拍屏对比,发现都不是真问题——问题是 footer 的 CSS 被一个全局 :root 里错写的变量覆盖了,那个变量叫 —primary-text-color-dark,其实压根没在 dark mode 下生效,只是碰巧覆盖了所有模式。代码里写了两百行注释讲这个变量多重要,一句没提它漏了 media query。 我原以为是需求没理清,结果不是。我原以为是还原度不够,结果不是。我原以为是设计太超前,结果也不是。就是一堆“能过编译”“能过 Jenkins”“能进 staging”的东西,全活着,但全卡在临界点上。它们不报错,不崩溃,只是让每一次点击变慢、每一次滚动变沉、每一次进入变犹豫——然后,用户就去了别处。没通知,没挽留,没告别。 下一步?下周约运维小张,带上笔记本,就在他工位上,重走一遍部署 checklist,一条一条,亲手敲命令,不 copy-paste。顺便把我杯子里那圈咖啡垢刮下来,送去化验。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |




浙公网安备 33038102330473号