Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax密集型页面:重复使用同一个XMLHttpRequest对象还是每次创建一个新对象?_Javascript_Ajax_Xmlhttprequest_Instance_Reusability - Fatal编程技术网

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

Javascript Ajax密集型页面:重复使用同一个XMLHttpRequest对象还是每次创建一个新对象?,javascript,ajax,xmlhttprequest,instance,reusability,Javascript,Ajax,Xmlhttprequest,Instance,Reusability,我正在开发某种在线多用户编辑器/协作界面,它将在一个页面生命周期内执行大量(如数千个)ajax请求 什么是最好的:(‘最佳’在稳定性、兼容性、避免麻烦方面) 创建一个XMLHttpRequest对象,并对每个HTTP请求重用该对象 为每个HTTP请求创建一个新的XMLHttpRequest对象 管理XMLHttpRequest对象的动态“池”,在启动HTTP请求时创建一个新的池,但没有可用的现有对象,并在上次请求成功完成时将以前创建的对象标记为“可用” 我认为1不是一个选项,因为有些请求可能会失

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

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

  • 创建一个XMLHttpRequest对象,并对每个HTTP请求重用该对象

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

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

  • 我认为1不是一个选项,因为有些请求可能会失败,我可能会在前一个请求尚未完成时启动新请求,等等

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


    以前从未尝试过3,但感觉它是两个世界中最好的。或者像这样的方法是不必要的,或者我仍然忽略了潜在的问题?确切地说,我可以假设一个请求何时完成(因此,对象可用于一个新的请求),这是在接收readyState 4和http状态200时完成的吗?(即,我是否可以确保此后不会有更多的更新或回调?

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


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

    只是想知道您计划使用哪台服务器以及连接到哪台互联网,因为如果您正确处理数千个请求,这个脚本是非常有用的资源。我有一个专门的服务器可供您使用这但是数千个请求只需要在几个小时内执行,这不像是每秒一个请求。更像是每分钟几次,但可能会持续几个小时。啊,如果你需要更快的速度,比如每秒一个请求,我建议使用flash或java appletThanks,那么javascript会做得很好。现在,我将采用简单的方法(每次只需创建一个新对象),并研究WebSocket。可以肯定的是,您指的是新的HTML5 javascript websocket,对吗?是的,可能还有一个库,如
    socket.io
    ,用于在必要时自动处理XHR回退。啊,以前从未听说过,谢谢!但有一件事,在上面的代码示例中,它似乎使用了JavaScript代码服务器端?谁或什么应该执行这些代码?我已经编写了hll(高级逻辑)websocket服务器,这意味着我可以在任何时候以任何方式使用websocket。(笑脸)我还没有用它们来连接浏览器,因为微软正在拖延这个节目。他们不支持它,直到MSIEV10(可能还不太好)。。。上一次我检查时,你只能在Windows8上看到。但是我很期待。你能详细说明一下开销吗?你是说网络带宽、延迟、RAM、CPU。。。?