【问题标题】:Google Chrome slows on Ajax requests when disconnected断开连接时 Google Chrome 处理 Ajax 请求的速度变慢
【发布时间】:2014-03-04 13:09:59
【问题描述】:

我正在使用 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。

【问题讨论】:

  • 我唯一的理论是防病毒程序以某种方式干扰。客户端正在运行趋势科技防毒墙网络版。
  • 应用程序是否会自动循环遍历任何响应数据?当我的应用尝试处理错误消息时,我遇到了同样的问题,就像它们是有用的数据一样。
  • 不,没有自动处理。发布的内容几乎就是所有发生的事情。

标签: jquery angularjs google-chrome


【解决方案1】:

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

此外,您还应该在发布请愿书时管理超时, 这里是一个例子:

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

注意:这将超时设置为 30 秒。

更多参数在这里Arguments for $http object

我希望这会有所帮助!

【讨论】:

  • 客户端确实有杀毒软件,我怀疑是这个原因。但是,我没有想到超时问题,我会尝试一下,看看它是否有帮助 - 如果有帮助,就奖励赏金!
  • 我怀疑这是我能得到的最接近的答案,虽然它还没有完全解决问题,但至少有帮助!
【解决方案2】:

看起来您的代码在等待来自服务器的响应,然后根据其成功或失败执行操作。所以,这并不真正指向性能问题,它只是说在你收到服务器的回复之前事情不会发生——这需要很长时间,因为服务器关闭并且它的连接重置(在等待之后响应)而不是立即连接被拒绝。因此有区别。

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

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多