有没有一种方法可以在不破坏XHR对象的情况下清除XHR对象的responseText?
我需要保持与web服务器的持久连接,以便将实时数据提供给浏览器。问题是,有相对大量的数据通过(每秒持续几百K),所以内存使用是一个大问题,因为这个连接必须保持打开至少几分钟。responseText很快就变得非常大,即使我发回的JSON已经被处理得尽可能小了。
由于服务器端应用程序的工作方式,如果我使用AJAX风格的短轮询,并在完成XHR对象后将其销毁,即使在解析响应、创建新的XHR并将其发送出去所需的几毫秒内,我也会丢失大量重要数据。我不能选择使用重叠请求,因为web服务器一次只接受一个连接。(不要问。)所以Comet正是我需要的模型。
我想要做的是在每个JSON块从服务器返回时解析它,然后清除responseText,这样我就可以继续使用相同的连接。但是,responseText是只读的。它不能通过我找到的任何方法直接清空。
这里有没有我漏掉的图片的一部分?有没有人知道当我读完responseText时可以用来释放它的小窍门?或者,服务器响应还有其他地方可以去吗?
我不包括代码,因为这几乎是一个与代码无关的问题。生成XHR并处理返回数据的Javascript例程非常非常简单。
发布于 2009-08-14 04:57:31
这就是长时间轮询的工作原理。您将索引保存到最后读取的行号中,并从该点开始读取间隔中的每一个滴答。这是一个很长的连接,因此是一个很长的响应。
一个新的responseText意味着一个新的连接。但那样它就不再是彗星了。)
发布于 2010-04-01 11:59:21
与其他响应相反,“长轮询”不是一个长连接。“长轮询”是许多按顺序进行的连接,每个连接设置为在不需要响应的情况下保持连接相当长的一段时间。它们确实会超时(通常在25-30秒左右),然后重新建立新的连接。由于HTTP1.1允许重用现有连接,因此无需重新协商连接,因此几乎可以立即重新建立连接。
所以,只要使用多个请求即可。由于重新建立连接的开销可以忽略不计,并且每个新连接都将使您能够销毁以前的响应文本,因此从性能/开销的角度来看,这是一个完全可行的解决方案,并且还将解决您的内存问题。
编辑作为WebSync的作者之一,我是从经验上讲的。
https://stackoverflow.com/questions/1275818
复制相似问题