合理数量的同步,异步Ajax请求

时间:2010-07-12 17:38:45

标签: javascript jquery ajax asynchronous request

我想知道对于通常允许多少同步异步Ajax请求的共识是什么。

我问的原因是,我正在开发个人网络应用程序。在大多数情况下,我将请求保持为一。但是,在某些情况下,我同时发送最多4个请求。这会导致一些延迟,因为浏览器一次只能处理2个。

目前,延迟在可用性方面不是问题。在我不得不担心可扩展性之前,还需要一段时间。但我正努力坚持最佳实践,尽可能合理。你的想法是什么? 4个请求是否合理?

5 个答案:

答案 0 :(得分:4)

我很确定浏览器会限制你可以拥有的连接数量。

如果您有Firefox,请输入about:config并查找network.http.max-connections-per-server,这将告诉您最大值。我几乎肯定这也是AJAX连接的限制。我认为IE仅限于2.我不确定Chrome或Opera。

编辑:

在Firefox 23中,名称为network.http.max-connections-per-server的首选项不存在,但有一个network.http.max-persistent-connections-per-server,默认值为6.

答案 1 :(得分:3)

这真的取决于它是否正常运作。如果应用程序的逻辑构建了4个同时请求是有意义的,那就这样做吧。如果通过将多个请求打包到一个请求中而不打扰逻辑,则可以这样做,但前提是它不会使代码更复杂。保持简单直接,直到遇到问题,然后就可以开始优化了。

但您可以问自己,是否可以改进应用程序的设计,以确保不需要多个请求。

还要在非常慢的连接上检查它。同时的http请求不一定按照正确的顺序在服务器上执行,它们也可能以不同的顺序返回。这可能会给你只会在较慢的线路上遇到的问题。

答案 2 :(得分:2)

如果不了解一些细节,很难回答。如果您只是触发请求并忘记它们,那么只要用户体验不会因性能缓慢而受到损害,那么4个请求可能没问题。但是,如果您必须从服务中收集信息,那么协调这些响应可能会变得棘手。这可能需要考虑。

基督徒之前的回答有一个好点 - 在缓慢的连接上检查它。 Fiddler可以提供帮助,因为它允许您通过模拟不同的连接速度(56K及以上)来测试慢速连接。

您还可以考虑触发一个异步请求,该请求可能包含一个或多个消息给控制服务,然后控制服务可以将消息传递给相应的服务,收集结果然后返回给客户端。触发多个异步请求然后在不同时间返回可能会给用户带来不稳定的体验,因为每个响应都会在不同时间在页面上呈现。

答案 3 :(得分:0)

我不是网络专家,但对于中小型应用程序来说可能不会有四个问题,但是,它越大,服务器负载越高,最终可能导致问题。这真的不能回答你的问题,但这是一个建议。如果延迟不是问题,为什么不使用队列。

var request = []//a queue of the requests to be sent to the server

request[request.length] = //whatever you want to send to the server
startSend();

function startSend(){//if nothing is in the queue go ahead and send this one
  if(request.length===1){
    send();
  }
}

function send(){//the ajax call to the server using the first request in queue
  var sendData = request[0];
  //code to send the data
  //then when you get the response (I can't remember exactly the code for it)
  //send it to a function to process the data
}

function process(data){
  request.splice(0,1);
  if(request.length>0){//check to see if you need to do another ajax call
    send();
  }
  //process data
}

这可能不是最好的方法,但是你可以修改它来做2个请求而不是只有一个。此外,也许您可​​以修改它以发送与队列中的请求一样多的请求作为一个请求。然后服务器将它们拆分并处理每个数据并将数据发回。由于服务器可以多次刷新数据,因此可以立即执行,甚至可以获取数据。您只需要确保正确解析响应文本。

答案 4 :(得分:0)

根据我的经验,1是最好的数字,但我同意可能会出现一些可能需要同时通话的罕见情况。

如果我记得,IE是唯一仍然限制连接到2的浏览器。这会导致您的请求成为队列,如果前2个请求的时间超过预期或超时,则其他两个请求将自动失败。在某些情况下,您还会在IE中获得令人讨厌的“允许脚本继续”对话框。

如果您的用户在所有4个请求都回来之前无法真正做任何事情(尤其是IE的JavaScript性能陷入困境),我会创建一个包含所有请求数据的传输对象,然后创建一个可以解析的返回传输对象并在返回时委派。