请教几个关于XMLHttpRequest的基础知识

业务中没有使用过ajax,只是对下面几个问题比较好奇,请知道的同学帮忙解释一下。

在IE,Firfox,Opera,Safari这几个主流浏览器中,XMLHttpRequest在以下情况有什么不同。

1.可以创建多少个XMLHttpRequest实例?
2.创建的XMLHttpRequest在什么时候才能释放?
3.对同一个XMLHttpRequest实例,如果同时发出多个异步请求,结果可测不可测?
4.同时可以有多少个XMLHttpRequest实例可以向服务器发出异步请求?
5.使用setInterval()可不可以让同一个XMLHttpRequest实例同时发出多个同步请求?结果可不可测?
6.使用setInterval()可不可以让多个个XMLHttpRequest实例同时发出多个同步请求?结果可不可测?

都是最基本的知识,谢谢你的回答。

  1. 创建实例的数量应该是没有限制的。
  2. Native的XHR是由JS引擎的垃圾回收系统回收的,规则和一般变量并无二致。不过IE的ActiveX版的XHR可能会因循环引用等无法回收,所以使用时需要注意。
  3. 这一点需要测试才知道,不过我觉得正常来说没有人会故意这样使用。
  4. 这取决于浏览器的限制。默认而言,IE对每个domain允许两个connection,所有加在一起总共不超过10个connection。FF类似,Opera似乎是允许4个。注意这个限额是针对所有请求的,包括图片、stylesheets等(尽管在调用XHR时它们很可能已经加载完毕了)。不过这种限制对于XHR来说是透明的,反正用完限额之后的就排队等待,当然这样实际上就不是异步的了。
  5. 同步会阻塞。从理论上说应该也会阻塞setInterval/setTimeout的执行。
  6. 同上。

以上是基于经验的,不过这些问题你都可以写点代码自己验证。

hax的回答很好,
不过偶感觉LZ除了高明白这些问题外,目的应该是寻求对于多个同步请求的实现问题,以及如何与应用结合,并且想找到可靠的解决方案。
首先,我不赞成LZ老想同一个XMLHttpRequest实例同时发出多个异步请求,这种出发点,这个出发点,就像hax所说,浏览器不同,结果可能不同的,也就是这个出发点不可靠。
巧的是,前几天正好我也在研究这个问题。而且有了方案。看看这个帖子
[url]http://www.iteye.com/topic/209575[/url]
不过我的标题起的不好,到现在还没有找到好的标题(找不到合适的词汇)。