javascript - Ajax 密集型页面 : reuse the same XMLHttpRequest object or create new one every time?

标签 javascript ajax xmlhttprequest instance reusability

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

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

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

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

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

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

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

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

最佳答案

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

但是,对于合作编辑器之类的东西,您可能需要考虑使用 WebSockets 而不是一直发送请求。小型 HTTP 请求的开销很大,而 WebSocket 连接几乎没有开销。

关于javascript - Ajax 密集型页面 : reuse the same XMLHttpRequest object or create new one every time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11079543/

相关文章:

javascript - 如何在指令范围内设置值

javascript - 无法读取实例内对象(未定义?)的属性

javascript - 为数组加载更多按钮

javascript - 禁用跨域ajax请求

javascript - 有没有办法阻止我的 JS 代码,直到 XMLHttpRequest 响应到达?

javascript - 网络请求 API : How to get the requestId of a new request?

javascript - 将数组传递给 $watchGroup 并在更改时更新数组

JavaScript 简单日期验证

ajax - Angular/RxJS 我应该取消订阅每个 ajax 调用吗?

javascript - 强制同步 XMLHttpRequest/Ajax 而不发出警告