6

我正在开发某种在线多用户编辑器/合作界面,它将在一个页面的生命周期内执行很多(如数千个)ajax 请求。

什么是最好的:(在稳定性、兼容性、避免麻烦方面的“最佳”)

  1. 创建一个 XMLHttpRequest 对象并为每个 HTTP 请求重用它

  2. 为每个 HTTP 请求创建一个新的 XMLHttpRequest 对象

  3. 管理 XMLHttpRequest 对象的动态“池”,在启动 HTTP 请求且没有现有对象可用时创建一个新对象,并在上次请求成功完成时将先前创建的对象标记为“可用”

我认为 1 不是一个选项,因为某些请求可能会失败,我可能会在前一个请求尚未完成时发起新请求,等等。

至于 2,我猜这是内存泄漏,或者可能导致疯狂的内存/资源使用。或者我可以在请求完成时以某种方式关闭或删除对象吗?(在哪里/如何?)或者 JS 垃圾收集器本身是否妥善处理了这个问题?

以前从未尝试过 3,但感觉就像两全其美。或者这样的方法是不必要的,还是我仍然错过了潜在的问题?究竟什么时候可以假设请求完成(因此,该对象可用于新请求),是在接收 readyState 4 和 http status 200 时?(即我能确定在那之后不会再有更新或回调吗?)

4

1 回答 1

3

需要时创建一个新的。一旦不再需要旧的,GC 将处理它们。

但是,对于像协作编辑器这样的东西,您可能需要考虑使用 WebSockets 而不是一直发送请求。一个小的 HTTP 请求的开销是巨大的,而 WebSocket 连接几乎没有开销。

于 2012-06-18T08:52:42.327 回答