2010-11-21 56 views
9

我正在编写一个相当大的基于JavaScript的应用程序,有时甚至有八个(8)个AJAX请求一次执行的情况。这是IE6中的一个问题,因为它杀死了其余的请求,我知道,但是这个应用程序是针对现代浏览器的,因此,IE6不是问题。有太多的多个同时AJAX连接不好?

但是,我有一种感觉(没有做过任何实际的分析),池化请求可以产生更好的性能。说一次最多4个请求。

所以,我的问题是,是否有任何好处来池AJAX请求,或者是有多个请求在同一时间进行相比,有一个接一个处理他们的池相比,是好的吗?

我意识到这可能取决于浏览器和Internet连接,但我不确定这一点。

回答

15

IE6不会是你唯一的问题;其他浏览器也限制并发请求数量到同一台服务器。 Here's a good roundup,它说,作为写作的默认值是:那篇文章

Browser   HTTP/1.1 HTTP/1.0 
-------   -------- -------- 
IE 6,7   2   4 
IE 8    6   6 
Firefox 2   2   8 
Firefox 3   6   6 
Safari 3,4  4   4 
Chrome 1,2  6   ? 
Chrome 3   4   4 
Opera 9.63  4   4 
Opera 10.00alpha 4   4

除此之外,另外两个重要的报价:

有可能重新配置你的浏览器使用不同的限制。

注意,IE8会自动回落到每台服务器2个连接的拨号连接的用户。

......对于您所知道的其他现代浏览器,或者可能会在下一个“点”发布时开始这样做。

如果可以的话,一定要尽量保持长期打开的连接数量为最小。当然,不要主动将多个连接长时间打开。

如果你只是做了很多单独的,快速的连接,有时它们会聚集在一起,你可能想自己序列化它们,而不是依靠浏览器来完成它。有一个表示需要完成的请求的对象队列,以及负责完成它们的代码(一次一个)。

+1

是的,限制连接数量总是会发生,但IE6从字面上杀死你的AJAX请求,如果你做了太多的请求,而不像新的浏览器那样让请求等待。 – Tower 2010-11-21 13:50:22

+0

那么,你是否建议我应该实施一个池,比如,在第四个之后请求“等待”并在其他结束之后继续? – Tower 2010-11-21 14:03:42

+1

@rFactor:不是一个池,一个队列,除非你真的重复使用打开的连接Comet风格。我可能一次只允许一个未完成的请求(请参阅我的编辑)。 – 2010-11-21 14:13:16

9

too many总是不好。

了解更多关于AJAX优化in this article

+7

*“'太多'总是不好的」* LOL!优秀的语义点。 – 2010-11-21 15:00:00

1

根据以上答案中列出的浏览器,是的。在某些情况下,如果他们没有按照时间顺序排队发送请求,则可能会发现在某些情况下,某些返回的信息可能会混淆并显示在错误的元素中,以寻求加载ajax POST请求返回信息。

+0

你是对的。您的'success()'函数会在接收到的订单中连续调用,而不是按照它们添加的顺序。这确实看起来很奇怪。 – 2017-04-16 21:12:32

+0

您可以使用jQuery Ajax加载函数,它们似乎在处理顺序上更好地处理。 – MattOlivos 2017-04-16 21:21:23