Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合理数量的同步、异步ajax请求_Javascript_Jquery_Ajax_Asynchronous_Request - Fatal编程技术网

Javascript 合理数量的同步、异步ajax请求

Javascript 合理数量的同步、异步ajax请求,javascript,jquery,ajax,asynchronous,request,Javascript,Jquery,Ajax,Asynchronous,Request,我想知道,对于通常允许多少并发异步ajax请求,大家的共识是什么 我问的原因是,我正在开发一个个人网络应用程序。在大多数情况下,我把我的要求减少到一个。但是,在某些情况下,我最多同时发送4个请求。这会导致一些延迟,因为浏览器一次只能处理2个 就可用性而言,延迟目前不是问题。还有一段时间我才不得不担心可伸缩性,如果有的话。但我正在尽可能地坚持最佳实践。你的想法是什么?4个请求是否合理 这取决于它是否能正常工作。如果应用程序的逻辑构建为4个simultaneos请求是有意义的,那么就这样做。如果将多

我想知道,对于通常允许多少并发异步ajax请求,大家的共识是什么

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


就可用性而言,延迟目前不是问题。还有一段时间我才不得不担心可伸缩性,如果有的话。但我正在尽可能地坚持最佳实践。你的想法是什么?4个请求是否合理

这取决于它是否能正常工作。如果应用程序的逻辑构建为4个simultaneos请求是有意义的,那么就这样做。如果将多个请求打包成一个请求不会影响逻辑,那么您可以这样做,但前提是这样做不会使代码变得更复杂。保持简单和直接,直到你有问题,然后你可以开始优化

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


在连接速度非常慢的情况下也要检查它。同步http请求不一定以正确的顺序在服务器上执行,它们也可能以不同的顺序返回。这可能会给你带来一些问题,你只能在较慢的线路上遇到。

不知道一些细节就很难回答。如果您只是启动请求并忘记它们,那么4个请求就可以了,20个请求也可以,只要用户体验不受缓慢性能的影响。但是,如果你必须从服务中收集信息,那么协调这些响应可能会变得棘手。这可能是值得考虑的问题。 Christian先前的回答有一个很好的观点——在慢速连接上检查它。Fiddler可以提供帮助,因为它允许您通过模拟不同的连接速度(56K及以上)来测试慢速连接


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

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

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个请求而不是一个请求的想法。另外,您可以修改它,使其发送的请求数量与队列中的请求数量相同。然后服务器将它们拆分并处理每一个数据,然后将数据发送回服务器。因为服务器可以多次刷新数据,所以可以一次全部刷新,甚至在获取数据时也可以。您只需确保正确解析响应文本。

根据我的经验,1是最好的数字,但我同意可能有一些罕见的情况需要同时调用

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


如果您的用户在4个请求全部返回之前无法执行任何操作(尤其是IE陷入困境的JavaScript性能)我将创建一个包含所有请求数据的传输对象,然后创建一个返回的传输对象,该对象可以在返回时进行解析和委派。

我很确定浏览器限制了您可以拥有的连接数

如果您有Firefox,请键入
about:config
并查找每个服务器的
network.http.max连接数,这将告诉您最大连接数。我几乎可以肯定,这也将是AJAX连接的限制。我想IE限制在2个以内。我不确定Chrome或Opera

编辑:

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