一个困扰了我两年的BUG

原创 木鱼  2018-03-08 10:34  阅读 776 次

一个困扰了我两年的BUG PHP 第1张

一个困扰了我两年的BUG PHP 第1张

一个困扰了我两年的BUG PHP 第1张

我在SegmentFault上的提问:

https://segmentfault.com/q/1010000013384526

问题描述

当开启laravel debugbar时,抓包发现上述错误。 使用php debug打断点调试发现,代码流程是正确走完的

环境

laravel5.2
php5.6
laravel-debugbar2.4(刚重装一次还是不行)
apache2.4

只有我一个人报错

当我把debugbar关闭时,或者将php版本从5.6切换到7.0时,错误消失!
其它同事没有这个问题(开发环境均是phpstudy)

日志

Php log、Apache log、laravel log都没有记录任何错误!

抓包

使用charles抓包发现,响应头和数据都是正常的!但是浏览器上错误依旧!

浏览器

怀疑是浏览器问题,使用了chrome和firefox,都一样...

两年的BUG

年假前的最后一天上班,离下班还有最后2小时的时候,悲剧的发现了这个问题!

因为要赶高铁,纵使内心有再多不爽我还是毅然的回家过年了!

年后回来后,问题依旧,开始不停DEBUG,查流程,一切正常啊!还是一切正常!为什么会错呢?

后来我发现了,和debugbar无关、php7无关!因为即使关掉debug、打开php7,还是有几率会出错。

JS > jquery.form.js

终于,我只能认为是前端的问题了。

除去不可能的剩下的即使再不可能,那也是真相。

我排查了JS,终于让我找到了一段代码:

$('#orderForm').ajaxForm(options);
var options={
    target: '#output',
    beforeSubmit: showRequest,
    success: showResponse,
    timeout: 3000,
    error: errorResponse,
};

这是jquery.form.js这个包的方法,这个包的作用是使用ajax的方式提交form表单。

我注意到了timeout: 3000这个参数,我又看了看我之前保存的BUG复现图,我发现了,所有的错误请求都是Time:3.00s

我查了查文档,这个参数的含义是:限制请求的时间,当请求大于3秒后,跳出请求

WTF?我果断把3000改为13000试了试,问题真的再也没出现了!(ffffffuck)

问题总结

后端问题:

由于项目类似于工作流,所有数据均从数据库中读取,各种字段属性比较多

开发环境缓存也是关闭状态,laravel的debugbar插件也会影响性能,php5.6相比于php7也是慢的不行。

所以种种原因结合到一起造成的结果就是,请求频繁的大于3秒,导致问题的出现。

前端问题:

代码写的不够严谨,直接限制请求时间不能大于3秒,不合理。

本文地址:https://www.m5yu.com/super-bug.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:木鱼博客
版权声明:本文为原创文章,版权归 木鱼 所有,欢迎分享本文,转载请保留出处!

发表评论