断开连接后,Google Chrome会因Ajax请求而变慢

时间:2014-03-04 13:10:00

标签: jquery angularjs google-chrome

我正在使用Angulars $http.post向服务器发出轮询请求。但是,如果服务器关闭,客户端浏览器(谷歌浏览器)变得非常慢,在Firefox上运行正常。我无法在我的开发机器上重现这一点,可能是因为它更强大,但我也注意到两台机器之间存在差异。客户浏览器报告ERR_CONNECTION_RESET,而我的报告ERR_CONNECTION_REFUSED。我不确定这是否有任何区别。

代码本身没有太大作用:

var update = function () {
    $http.post(url)
        .success(onSuccess)
        .error(onError);
};

var onError = function () {
    $rootScope.errors = true;
    $timeout(update, pollInterval * 2);
};

var onSuccess = function (data) {
    _data = data;
    $rootScope.$broadcast('dataUpdated');
    $rootScope.errors = false;
    $timeout(update, pollInterval);
};

我找不到任何理由为什么这会在断开连接时放慢Chrome的速度。返回5xx http code工作正常,因此它也不应与onError函数相关。谷歌浏览器版本为33.0.1750。

2 个答案:

答案 0 :(得分:1)

您应该看到生产服务器上的设置...其他原因是客户端有防病毒软件或反间谍软件。

此外,你应该管理你的职位申请超时, 这里有一个例子:

var update = function () {
    $http.post(url,null,{ timeout:3000 })
    .success(onSuccess)
    .error(onError);
};

注意:此设置超时30秒。

此处有更多参数Arguments for $http object

我希望这有帮助!

答案 1 :(得分:0)

看起来您的代码等待来自服务器的响应,然后在成功或失败的情况下执行操作。所以,这并没有真正指出性能问题,它只是说直到你从服务器收到回复才会发生事情 - 这需要花费很多时间,因为服务器关闭并且连接重置(等待之后)为了回应而不是立即拒绝连接。因此存在差异。

我建议您在服务器可能关闭的情况下使用超时时使用$ http。 Here's the doc