Chrome网络开发者工具选项卡显示Dojo AJAX请求需要大约44年才能完成。

8

16027.8

通过Web开发人员工具中的Chrome Network Tab,我们可以看到我的一堆AJAX请求需要花费16027.8天才能完成,这显然不是实际所需时间。

我在多台机器上复现了此问题,在开发环境和生产环境中也出现了。所有在onload时发生的Dojo AJAX请求都会出现这个问题,但不适用于其他网站或第三方请求(如登录AJAX或Facebook)。

出了什么问题? 我们的服务器出了问题吗?这是Chrome开发工具的一个bug(几乎肯定是),如果是的话,有没有办法解决呢?可以想象,这使得视觉瀑布图变得非常无用。

编辑:根据新的信息,这似乎是IBM Websphere Commerce网站的常见问题。可能是服务器或代码的什么原因导致的?请参考以下链接获取示例:

http://www.ikea.com/us/en/catalog/categories/departments/kitchen/# http://www.lavieenrose.com/webapp/wcs/stores/servlet/LVER_10052_10001_-1 http://www.ferragamo.com/shop/en/usa

编辑2:这个问题在最新版本的Chrome中已经解决了。


1
请求这么长,延迟还是相当不错的。 - Adam Jenkins
1
这是Chrome 31.0.1650.57 m版本在Windows 7上运行,如果有帮助的话。 - MattDiamant
1
我刚刚在隐身模式下(禁用扩展程序)再次运行了它,结果是相同的。 - MattDiamant
@MattDiamant - 我在相同的操作系统上运行相同的构建,我的开发工具中没有任何异常。你能否发布一个链接到给你这些结果的网站? - Adam Jenkins
1
刚刚意识到16041天前是1970年1月1日。时代失败。 - MattDiamant
显示剩余3条评论
2个回答

7

此问题与Web框架或服务器无关。该问题影响Chrome浏览器版本31.0.1650.57。

现在此问题已经修复,并将在下一个稳定频道更新中发布。 修复差异

如果您需要紧急修复,请更新到开发者频道版本。 说明

有关更多详细信息,请参见此问题


2
非常奇怪。在OSX Mavericks上的Chrome 31.0.1650.57上也能够重现。使用宜家链接进行测试,注意到Chrome报告了16028.7天,资源/us/en/iows/tealium的延迟为41毫秒。
Charles代理显示以下标头:
HTTP/1.1 304 Not Modified
Content-Type: application/json
Last-Modified: Mon, 18 Nov 2013 18:34:51 GMT
Cache-Control: public, max-age=7200
Date: Sat, 23 Nov 2013 00:32:26 GMT
Connection: keep-alive
Vary: Accept-Encoding

代理应用程序(Charles)报告没有这样奇怪的时间-它显示40毫秒。 lavieenrose.com链接导致Chrome报告16028.7天的时间,这似乎很常见。 Charles显示:
HTTP/1.1 200 OK
Date: Sat, 23 Nov 2013 00:46:37 GMT
Server: IBM_HTTP_Server
Last-Modified: Tue, 19 Jun 2012 13:05:34 GMT
ETag: "5c487f-1a15-4c2d2f01a0380"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 1738
Content-Type: application/x-javascript

我的结论是这不是服务器响应或头文件问题。我认为这是Chromium或WebKit开发工具的问题。
以下是代表由“网络”选项卡呈现的HTTP请求的开发工具JS对象的HEAD:

https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js

我对set endTime()中的数学有疑问:
set endTime(x)
{
    if (this.timing && this.timing.requestTime) {
        // Check against accurate responseReceivedTime.
        this._endTime = Math.max(x, this.responseReceivedTime);
    } else {
        // Prefer endTime since it might be from the network stack.
        this._endTime = x;
        if (this._responseReceivedTime > x)
            this._responseReceivedTime = x;
    }
},

目前还没有答案,但也许了解WebKit/Chromium DevTools更多的人会看到这个问题...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接