网站修改代码
凌晨两点十七分,网站我盯着屏幕上那个报错的修改弹窗,第五百次确认自己只是代码改了一个CSS类名。网站后台立刻变成了白屏,网站像被人抽走了所有骨头。修改这行代码昨天还好好的代码,今天早上九点它还在生产环境里正常渲染,网站直到我手贱加了个display:flex。修改
改代码这事,代码最唬人的网站地方在于它看起来太简单了。一个分号,修改一个闭合标签,代码一个变量名的网站大小写——你以为你在做外科手术,实际上是修改在给定时炸弹剪引线。上周我同事老周改了个导航栏的代码hover颜色,从#333改成#444,结果整个页面的字体全变成了宋体。没人知道为什么,他自己也说不清,最后我们花了四个小时逐行排查,发现是某个压缩插件缓存了旧版的全局样式表,而老周的改动恰好触发了那个文件的重新加载。
写代码和改代码完全是两码事。写是从无到有,逻辑在你脑子里长出来,每一步都踩得实。改是面对一团别人(或者三个月前的自己)留下的毛线球,你得顺着线头摸,摸错了就打个死结。我见过最离谱的一次,是有人为了修复一个登录bug,在session验证里加了三层if嵌套,结果把正常用户的登出功能给干掉了。那个bug在测试环境躺了两周,直到某个用户连续快速点击“退出”按钮三次,系统直接给他分配了另一个人的账号权限。
所以我现在改任何代码之前,都会先做两件事。第一,把要动的那个文件复制一份,改名加后缀_backup_日期,扔在项目根目录。别笑,这个习惯救过我至少六次。第二,在本地跑一遍完整的测试脚本,哪怕只是改个按钮文案。你知道最讽刺的是什么?每次出问题的都不是你改的那行,而是它旁边那行——因为改代码就像在书页上涂改液,你越用力擦,底下的纸越容易破。
那次白屏事故最后查明了,是预处理器编译时把某个mixin的变量名给拼错了。我改的CSS类名本身没毛病,但那个类名恰好被另一个模块引用,而那个模块的样式文件里有个同名但不同作用的变量。修复只花了两分钟,把变量名改成_btn_color_hover就行。但排查过程花了我六个小时,期间我喝了四杯咖啡,骂了三次街,还差点把键盘摔了。
改代码真正的门槛,从来不是语法或算法,而是你得接受一个事实:你永远不可能完全掌握系统里所有隐含的耦合关系。就像你不可能记住每一条街的井盖位置,但骑车的时候还是得躲着走。我现在养成了个习惯,每次提交改动前都问自己一句:“如果这个改动导致线上崩溃,我能在半小时内找到原因吗?”如果答案是否定的,我就再花十分钟把相关模块的依赖关系捋一遍。
凌晨四点,白屏恢复了。我刷新了三次页面,确认所有样式正常,然后给运维发了条消息说改完了。对方秒回了个“👍”,连问都没问改了什么。这大概就是改代码这行的常态——你永远在擦屁股,但没人记得你擦得有多干净,除非你没擦干净。