时间:2024-01-07 00:18:01 | 来源:网站运营
时间:2024-01-07 00:18:01 来源:网站运营
有哪些让你目瞪口呆的 Bug ?:前端工程师,17年经历了一些灵异的bug:DSP 广告平台的接口,让 Java 服务化提供接口, PHP 做 web 控制层掌管路由和透传接口,于是对之前的接口URL重新规划统一了一下,内测没问题后就高高兴兴上线了,然而没过多久就有商家上报说页面报错没数据,于是我赶紧复现,但怎么都复现不出来,然后问商家浏览器是不是版本太低,网络是不是不稳定之类的,但商家的浏览器和网络环境都没问题,这就纳闷了,于是果断找了一台 Windows 机器(因为我们都是Mac而且没装虚拟机),让商家加 QQ 远程协助看一下到底报了什么错,倒腾了半天,连上商家电脑,复现果然报错了 NetWork Error ,打开 Chrome Devtools 一查, ajax 请求居然没没发出去。看了一眼浏览器上那一排插件,怀疑是不是插件搞的鬼,发现居然有屏蔽广告的插件,大哥,你特么自己都在我们平台上投广告,你还装屏蔽广告插件。果断让他关闭这个插件,然后果然没问题。原来我们的接口URL里有 advertisement这个单词,插件直接屏蔽了这个URL。没过多久,又有一个商家报页面没数据,呵呵,我们直接叫他关闭浏览器屏蔽广告插件,结果商家告诉我还是不行。 还是远程协助查一下,发现开了隐身窗口,接口还是没返回数据,看到商家电脑右下角运行的系统杀毒软件,眉头一皱,难道是这货搞的鬼?打开设置一看,赫然有屏蔽广告这个选项。果然国产软件都流氓,你这所有的浏览记录都被人家知道了啊。第二天果断把 advertisement 改成gg(guanggao),整个世界都清净了。IP 、操作路径等,这样就不需要再用 Windows 远程了。某一天,告警平台发邮件报错,店铺选择页面 js 运行报错,那还得了,选择不了店铺,相当于我们的后台入口挂了啊。果断按照报错的操作路径操作一次,又没复现。再一看操作系统与浏览器版本,找了一个一模一样的环境,还是复现不出来。晕了,还是用远程协助吧。商家那里确实有 js 运行报错,由于线上 js 也没有 source map ,压缩的代码也看不懂,查半天也没查出什么东西。回到监控平台后台,反复比对各条报错。结果发现 IP 都是差不多的范围,一查都是杭州电信的运营商,难道所有杭州电信的用户加载的这个 js 有问题?然后报给运维同学,他把那个 js 下载下来一看,长度不一样,和正常的版本比,少了一小段。肯定是 cdn 同步的时候,出了故障,果断把锅丢给七牛。base 的 js 运行报错,涉及的浏览器版本都是Chrome 31到37,轻车熟路开虚拟机复现,找半天找了一个Chrome 31,确实报错了,然而报错内容看不懂。想着那天发布内容包括升级基础 react 组件,加了一个 babel runtime ,还有一些其他的改动,难道是这些问题引起的?Chrome 运行本地代码,于是在 win 里面装 node 、 git 、下载仓库、打包、把线上代码代理到本地。结果node-modules都装不上去。然后再试试装 fiddler 抓包软件,把打包后的代码放在 win 里面,抓取那几个 js ,替换成打包后的本地代码,然而还是看不懂,只知道是一个基础函数,可能是 babel polyfill 的问题,于是尝试把前端仓库那几天的改成一一 revert ,看看到底是哪个改动导致的问题。结果回退到发布之前都还是报错,这就尴尬了,至此我已经花了一天时间去排查这个问题,期间让几个同事一起排查也没发现问题本源。win 的网络设置成 Mac 一样的网络,把 win 浏览器使用 SwitchySharp 设置成 Mac的代理,这样就可以在 win 里面使用 Mac 的开发环境,(其实就是在 Mac 起一个 node 服务,监听一个端口,在这个服务里把所有的线上的前端资源( js , css )替换成本地代码,本地这个服务相当于一个网关服务器,还可以把网址指向不同环境的服务器。)结果惊奇的发现在预发环境是没有问题的,只有线上环境才有报错。我的第一反应是难道后端改造了什么数据类型?把线上数据和预发环境数据比对一下,然而一模一样。这个时候,对比两个环境只有两个差异了,一个线上环境多一个统计日志上报的 js ,还有一个就是错误收集上报的 js ,问了一下这两个 js 的维护者,果然统计日志的js,在那次发布的时候改动了,为了使用Object.assign,加了一个 polyfill ,然后和 base js 里面的 polyfill 冲突了,由于统计日志的 js 先加载,所以报错是在 base js 里面。js )和前端仓库产生了关联,版本回退难以排查js 并不是出现报错的 js 关键词: