程序员必追!本周技术动态与行业快讯
|
跟产品经理吵完的第三个小时,我盯着 Chrome DevTools 的 Network tab 发呆——它卡在 pending 状态,而旁边同事刚端着保温杯路过,杯盖没拧紧,水渍沿着杯壁往下淌,在键盘右下角积了一小洼。我伸手抹了下,抹到的是凉的。这事儿得从上周四说起,十一月那会儿我们整个前端组跪着调 Safari 的 CSS scroll-behavior 兼容性,结果今天早上产品经理甩来新需求文档,标题叫《程序员必追!本周技术动态与行业快讯》——就这八个字,我敢打包票,他连“scroll-behavior”四个字母都没拼全过。 先扔结论:它不是资讯产品,是筛子。优胜劣汰那种筛子。我原以为就是个带 RSS 聚合功能的后台页面,结果上线三小时,后端同学蹲在工位边啃包子边念叨“你猜我改了几版 schema?”——他改了四版,第七次部署时发现 NewsItem.status 字段被前端悄悄当成布尔用了,其实它是 enum,包含 'draft' / 'published' / 'archived_by_misconfiguration'。这个我敢打包票。但“archived_by_misconfiguration”是不是他们自己加的?我说不准。我只看见他删掉半行代码,然后把包子馅抖进汤里,吸溜了一口。 双屏左边壁纸还是去年十一月拍的雁栖湖晨雾,灰蓝调,颗粒感重;右边壁纸三个月前换成了手绘的 Node.js 图标,线稿没填色,现在左上角缺了一块,像被什么咬掉的。我盯着那缺口看的时候,突然想起测试同学昨天下午三点十七分给我发消息:“你们那个‘必追’卡片hover态,IE11里触发两次transitionend。”我没回,因为那一刻我的键盘空格键陷下去没弹起来——就卡在那儿,我按了三次,抬手、按键、松手,再抬手、再按,再松手,它才“咔”一声蹦出来。这种事不用写进buglist,它自己会死在下周的重构里。
文章配图,仅供参考 但问题不在IE11。在Chrome。确切说,在新版Chrome里devtools Performance tab里点开一个382ms的长任务,往下滑,看到底下堆了十八毫秒的 layout thrashing,起因是“必追”页脚那个动态加载的 Newsletter 订阅弹窗——它每次滚动都重新计算 position: sticky 的 containment,而containment 区域里有个用 transformX 模拟的视差层……等等,这不是重点。重点是PM上午十点站在我工位说“要让用户一眼感知价值”,我点头,下午三点他邮件补了一句:“记得加个微交互,让点击有呼吸感。”呼吸感?我们连滚动条都不让他动——禁了overflow-y,理由是“保持沉浸”。结果呢?用户滑到底,手指继续往下搓,页面卡住半秒,然后整个 viewport 向上跳十七像素。我截图发给测试,她回:“已复现,在 Pixel 6 和 iPhone14 上表现不一致,前者跳,后者直接白屏。”白屏我见过,但白屏时还同步播放一段 TTS 阅读“您正在阅读程序员必追第17期”,这我就没见过。桌上那盒酸辣粉放了四十分钟,汤洒了一滴,在机械键盘F7键旁边凝成琥珀色小点。F7我基本不用,但每次误触,都会激活某段老旧的 console.time() 调试逻辑,输出一串带时间戳的“[legacy] hydration start”。这玩意儿本该去年Q4干掉,但PR review里后端批注:“留着吧,我们日志系统依赖它的时间戳格式。”——留着。好。于是上周五凌晨一点半,监控告警打到我手机,来源是那个TTS播报组件,报错信息写着“Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first”。用户没交互?可人家点的是分享按钮啊。点分享,播新闻,播一半崩。我们查源码,发现是 share() 方法里混了一行 navigator.mediaDevices.getUserMedia({ audio: false }) ——谁写的?没人认。Git blame 显示作者是 git-bot-auto-merge,上一次人工提交者叫“jenkins-ci”,时间是二〇二三年十二月十五日十七点零三分。 我忽然想起上周三晨会,PM用红框圈出 Figma 原型里的那个“必追”徽章图标,说:“这个圆角要更呼吸一点。”呼吸。对,又要呼吸。UI 同学当场打开 Sketch 改数值,0.3rem 改成 0.32rem,然后说“现在它有空气感了”。我在下面默默切到终端,敲 npm run lint ——它跑完,报错十六处,全是 no-unused-vars,其中七处变量名是 tmp、tmp2、tmp3、_res、res2、responseCopy、resultClone。没人删。它们活得好好的,就像那个 never resolved 的 Promise,还在首页 JS bundle 里躺着,占了三百七十二个节点的 AST。 后来我把“程序员必追”这几个字从导航栏摘了,挂到 footer 最右侧,字体调成 12px,颜色 #999,鼠标悬停不放大也不变色。上线后流量跌了百分之六,但错误率降了八十七。运营找我问原因,我说:“人不再点它了。”她说:“可它还是‘必追’啊。”我说:“对,它还是,只是现在只有我们自己追。” 我现在盯着 DevTools 的 Application tab,看缓存列表里躺着十七个版本的 service-worker.js,最新那个更新时间是“昨天下午四点二十三分”,但里面还有三行 console.log('v1.2.3-hotfix-rc2'),没删干净。我点了下 Clear storage,又反悔了,关掉 tab。旁边的同事刚倒完水回来,把杯子搁我显示器边缘,水印印在雁栖湖雾气上,像一枚临时图章。我懒得擦。 反正下周一,PM说要上线「AI摘要+语音播报Pro版」,接口文档还没发,但我已经预感会遇到一个奇怪的 CORS 头——Access-Control-Allow-Origin 写的是 ,但 Access-Control-Allow-Headers 里混进了 “X-Internal-Auth-Token-Bypass”。这事我先不碰。等它真崩了,我再去翻 nginx 配置。现在,我先把F7键上的汤渍擦掉。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

