我正在开发某种在线多用户编辑器/合作社界面,它将在一页生命周期内处理大量(例如成千上万个)ajax请求。
最佳方法:(在稳定性,兼容性,避免麻烦方面为“最佳”)
创建一个XMLHttpRequest对象,并将其重新用于每个HTTP请求
为每个HTTP请求创建一个新的XMLHttpRequest对象
管理XMLHttpRequest对象的动态“池”,在启动HTTP请求且现有对象不可用时创建一个新对象,并在其上一个请求成功完成后将先前创建的对象标记为“可用”
我认为1不是一个选择,因为某些请求可能会失败,而上一个请求尚未完成时,我可能正在发起新请求,等等。
至于2,我猜这是内存泄漏,或者可能导致疯狂的内存/资源使用。还是可以在请求完成后以某种方式关闭或删除对象?(在哪里/如何?)还是JS垃圾收集器适当地照顾好了它本身?
以前从未尝试过3,但感觉就像两全其美。还是这样的方法是不必要的,还是我仍然缺少潜在的问题?确切地说,什么时候可以假定请求完成(因此,该对象可用于新请求),是何时接收readyState 4和http status 200?(即,我可以确定之后不会再有更新或回调了吗?)
需要时创建一个新的。一旦不再需要旧GC,GC将对其进行处理。
但是,对于像合作编辑器这样的工具,您可能需要考虑使用WebSockets而不是一直发送请求。一个小的HTTP请求的开销是巨大的,而WebSocket连接几乎没有开销。