2010-07-12 52 views
5

我想知道共识是多少同时异步阿贾克斯请求通常是允许的。合理数量的同步异步阿贾克斯请求

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

目前,延迟在可用性方面并不是问题。如果有的话,我必须担心可扩展性。但我试图坚持最佳实践,尽可能合理。你怎么看? 4个请求是否合理?

回答

2

这真的取决于它是否正常工作。如果应用程序的逻辑是建立在4个同步请求有意义的基础上的,那就这样做。如果通过将多个请求打包成一个请求而不影响逻辑,则可以这样做,但前提是它不会使代码更复杂。保持它简单直接,直到你有问题,然后你可以开始优化。

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

另请检查它是否速度很慢。同时的http请求不一定以正确的顺序在服务器上执行,它们也可能以不同的顺序返回。这可能会给您遇到的问题只会在较慢的线路上遇到。

2

这很难回答,不知道一些细节。如果你只是发出请求并忘记它们,那么4个请求可能会很好,20个 - 只要用户体验不会受到性能下降的伤害。但是,如果您必须从服务中收集信息,那么协调这些响应可能会变得棘手。这可能是需要考虑的事情。

克里斯蒂安的上一个答案有一个好处 - 检查一个慢速连接。提琴手可以提供帮助,因为它允许您通过模拟不同的连接速度(56K及以上)来测试慢速连接。

您也可以考虑向控制服务发出一个可能包含一条或多条消息的异步请求,然后可以将这些消息传递给相应的服务,收集结果并返回给客户端。有多个异步请求被触发然后在不同时间返回可能会给用户带来波涛汹涌的体验,因为每个响应都会在不同时间在页面上呈现。

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个请求,而不只是一个想法。此外,也许你可以修改它发送尽可能多的请求,因为它们在队列中作为一个请求。然后服务器将它们分开并处理每一个并将数据发回。一次或甚至一次得到它,因为服务器可以多次刷新数据。您只需确保您正确解析响应文本。

0

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

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

如果你的用户在所有4个请求返回之前都不能做任何事情(特别是IE浏览器的JavaScript性能下降),我会创建一个传输对象,它包含所有请求的数据,然后返回一个可以返回的传输对象解析并委托返回。

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。