Ajax请求是并发还是串行的?
发布于 11 年前 作者 novembereleven 9353 次浏览 最后一次编辑是 8 年前

for (var i = 0; i < 100; i++) { $.get(‘http://localhost’, { id:123}, function(res){}); } 例如这样的代码,浏览器是同时请求的吗?

11 回复

理论上是同时的

不是,浏览器会另起线程来发起http请求,请求完成后会把回调函数塞到事件队列里面进行

并发,代码中的匿名函数 function(res){} 就是回调用的了

$.get(url, { async: false/true }, callback) async默认是true

并发,不过也受同一域名的最大连接数限制。

ajax是异步请求的

这能说浏览器端是并发的,服务器端可能会有限制,我写过这类脚本,被坑惨了,看似并发发送请求,服务器却是一个一个返回,并发的6个ajax,因为处理时间比较长,全是挂起,一个处理返回,下一个才被处理。

你并没有用Worker创建进程,本质上并不是并发, 只有一个js进程。

ajax中的js只是连续执行了$.get()函数里边的代码, 而get内部的tcp通信,则是由操作系统与目标打交道, 操作系统是支持并发的, 如果前边的没有响应完, 后边的可以继续并发。

跟 new Worker(‘a.js’)使用js子进程是不一样的。

那是因为你没有设置异步,ajax既可以同步也可以异步, 同步则是要等待操作系统返回结果再运行。

回到顶部