06月28, 2018

奇怪的bug们

一会要述职了,紧张的没法好好思考好好写代码,不知道在紧张什么,所以写篇博客,总结一下这两天遇到的奇怪的bug吧。也不是什么技术文了,就是实在紧张,记录吐槽一下。

先说一个很简单的,有个同学和我反馈,说搜索的时候,搜索某个特定的关键字会失败,但是随便搜索别的就是正常的。看了一下,发现是连请求都没有发送成功,报错写的是Provisional headers are shown。

第一次遇到这种奇妙的情况,搜了一下,第一个人说是打断点了,显然不是这个原因。后来看到说,可能是浏览器插件的问题,果然开了隐身模式就正常了咩,被当成广告拦截了。

经验值 +1。不过后来和师兄说的时候,我没说完他就知道为什么了,好像是个比较常见的事?

第二个问题,是一个不会必现的问题,分析了一圈,看到hulk中有两种相关的写法,粗浅的测试了一下,第一种写法会出问题,第二种不会。但是因为很多地方都用了第一种写法,如果要求改的话,要依次修改每个的子集页面,担心遗漏了什么,所以选了其他的方式来修改。为此还特意写了个文档想提醒一下大家尽量用第二种方法。

文档是这样写的:


Hulk当中有些详情页做了如下优化: 当业务切换时,会让页面跳回到相应的列表页。拿MySQL举例

//在mysql根目录监听,当切换业务时,跳转至MySQL的列表页
 this.listen(ProjectSelectStore, ()=>{
     this.props.history.pushState(null, '/mysql/**/list');
 }, 'selectProjectSuccess');

然而Hulk最上方有一个全局搜索

当命中搜索时,会根据内容切换业务再跳转至对应页面。 因此,当在一些详情页进行全局搜索的时候,会触发两个跳转,最后无法保证成功跳转至指定的搜索结果页。

因此更好的方法,拿redis中的代码举例子:

//在每个详情页中
componentWillReceiveProps(nextProps) {
    if( this.props.business.id !== nextProps.business.id ) {
      this.props.history.pushState(null, '/redis/**/list');
    }
  }

这样可能这段代码要写很多遍,但是不会在全局搜索的时候同时触发两个跳转。


结果写到结尾的时候,陷入了思考,为什么第二种方式不会出问题,想了下就是看父节点传递数据给子节点和pushState的速度问题了。认真测了一下,虽然很难复现,但是确实也是会出错的……所以最后就是把全局搜索的pushState延迟了500ms,来保证正确性了。写的文档并没有什么卵用……

今天开发新需求,也遇到了奇怪的问题。明明很好修改的地方,改完时而会显示出问题。找了一圈,最后发现是一个盆友在创建页面的时候,复制的代码,其中有一个请求是不需要的,但是却没删除而且把返回值赋值给了一个正在使用的变量……GG……

这两天hulk总出奇怪的问题,咩咩咩……然后几分钟就写完了,还是很紧张该怎么办……

本文链接:http://crystalmiao.com/post/bugs.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。