AngularJS $http.get() 在 Chrome 中最多需要 10-20 秒,在 Firefox 中运行良好

Posted

技术标签:

【中文标题】AngularJS $http.get() 在 Chrome 中最多需要 10-20 秒,在 Firefox 中运行良好【英文标题】:AngularJS $http.get() takes up to 10-20 seconds in Chrome, works fine in Firefox 【发布时间】:2013-10-13 01:28:01 【问题描述】:

我在使用 AngularJS/Google Chrome 时遇到了一个奇怪的错误。当我执行 $http.get() 时,最多需要 18 秒才能真正完成。 “OPTIONS”方法似乎保持在“PENDING”:

http://i.imgur.com/yEozFdm.png

为页面提供服务的服务器是 Mongoose,@ localhost:5000 是 Fl​​ask,它返回以下标头以使 CORS 工作。

@mod.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', 'http://localhost:8080')
    response.headers.add('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
    response.headers.add('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type,     Accept')

有人知道 Chrome 为何延迟 OPTIONS 请求吗? (从烧瓶服务器调试控制台看来,OPTIONS 方法实际上只在页面重新加载后 10-20 秒到达)。它似乎在 Firefox 中运行良好。

【问题讨论】:

【参考方案1】:

一旦我禁用“预测网络操作以提高页面加载性能”选项,它似乎已经解决了。很奇怪,也许我应该让这个问题悬而未决,是否有人可以给出可能的原因?

编辑:查看 cmets 的原因!

【讨论】:

嗨,Busata,我们遇到了同样的问题,不知道您是否能够理解为什么会发生这种情况? 禁用该选项后我没有进一步调查,我将在这周晚些时候尝试,也许这是一个 Chrome 错误? 我有同样的问题,是的,一旦我禁用“预测网络操作以提高页面加载性能”选项,问题就会消失。有人有一些消息如何解决这个问题? 这是由于Flask开发服务器在单线程上串行处理请求引起的。 Chrome 的预测优化会并行打开多个连接,Flask 服务器会超时等待其中一些连接上的数据(即使没有数据发送)。最简单的解决方案是使用像 Tornado 这样的生产 Web 服务器。看到这个solution

以上是关于AngularJS $http.get() 在 Chrome 中最多需要 10-20 秒,在 Firefox 中运行良好的主要内容,如果未能解决你的问题,请参考以下文章

在 AngularJS 中缓存 HTTP 'Get' 服务响应?

如何在 AngularJS 中从 $http.get 返回图像

AngularJS $http.get() 在 Chrome 中最多需要 10-20 秒,在 Firefox 中运行良好

angularJS中的$http.get错误——成功不是函数[重复]

在AngularJS指令中为$ http.get加载模板属性

如何在 AngularJS 中使用 $http.get 从 jsp 页面获取响应?