当前位置: 首页 > 面试题库 >

Ajax密集页面:每次重用同一个XMLHttpRequest对象还是创建一个新对象?

巫马令
2023-03-14
问题内容

我正在开发某种在线多用户编辑器/合作社界面,它将在一页生命周期内处理大量(例如成千上万个)ajax请求。

最佳方法:(在稳定性,兼容性,避免麻烦方面为“最佳”)

  1. 创建一个XMLHttpRequest对象,并将其重新用于每个HTTP请求

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

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

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

至于2,我猜这是内存泄漏,或者可能导致疯狂的内存/资源使用。还是可以在请求完成后以某种方式关闭或删除对象?(在哪里/如何?)还是JS垃圾收集器适当地照顾好了它本身?

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


问题答案:

需要时创建一个新的。一旦不再需要旧GC,GC将对其进行处理。

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



 类似资料:
  • XMLHttpRequest 是 AJAX 的基础。 XMLHttpRequest 对象 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。 XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 创建 XMLHttpRequest 对象 所有现代浏览器(IE7+、

  • 问题内容: 我只是想知道:在Java应用程序中,每次需要连接到FTP服务器时,我应该创建一个新的FTPClient对象,还是应该创建一个FTPClient()对象,并在每次连接至一个FTP服务器? 问题答案: 重用会更好,因为每次创建新连接甚至与新服务器时都不需要新实例。因为连接和断开连接方法可以为您完成这项工作。 因此,请尽可能多地重用对象。

  • 问题内容: 例如: 相对于: 一个比另一个更有效吗? 问题答案: 返回之前分配给临时变量使您有机会从newPerson()中进行错误检查和更正。返回新的调用要求newPerson()方法的调用者捕获错误并从错误中恢复。

  • 本文向大家介绍AJAX XMLHttpRequest对象创建使用详解,包括了AJAX XMLHttpRequest对象创建使用详解的使用技巧和注意事项,需要的朋友参考一下 创建XMLHttpRequest对象 XMLHttpRequest是AJAX的基础。 所有现代浏览器(IE7+、Firefox、Chrome、Safari以及Opera)均内建XMLHttpRequest对象。 注:IE5/IE

  • 问题内容: 我想知道如果在同一个对象上同步两次,在Java中是否会出现任何奇怪的行为? 场景如下 两种方法都使用该对象并对其进行同步。当第一个方法调用第二个方法时,它会被锁定而停止吗? 我不这么认为,因为它是同一个线程,但是我不确定是否可能会出现其他任何奇怪的结果。 问题答案: 同步块使用 可重入 锁,这意味着如果线程已经持有该锁,则它可以重新获取它而不会出现问题。因此,您的代码将按预期工作。 请

  • 我对RxJS很陌生,所以如果这个问题已经得到回答,我提前道歉。 我有一个Angular 2应用程序,在其中一个组件中有一个普通对象。我将UI绑定到这个对象。我想做的是能够捕获对这个对象的所有更改,无论它们来自代码还是来自用户更改其中一个字段。 我正在查看可观察对象,但似乎只有通过Emit方法推送新对象时,订阅者才能接收通知。例如,在属性绑定到输入字段的情况下,这将如何工作? 有更好的方法吗? 这是