首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Comet、responseText和内存使用

问Comet、responseText和内存使用
EN

Stack Overflow用户
提问于 2009-08-14 02:50:54
回答 2查看 1.4K关注 0票数 5

有没有一种方法可以在不破坏XHR对象的情况下清除XHR对象的responseText?

我需要保持与web服务器的持久连接,以便将实时数据提供给浏览器。问题是,有相对大量的数据通过(每秒持续几百K),所以内存使用是一个大问题,因为这个连接必须保持打开至少几分钟。responseText很快就变得非常大,即使我发回的JSON已经被处理得尽可能小了。

由于服务器端应用程序的工作方式,如果我使用AJAX风格的短轮询,并在完成XHR对象后将其销毁,即使在解析响应、创建新的XHR并将其发送出去所需的几毫秒内,我也会丢失大量重要数据。我不能选择使用重叠请求,因为web服务器一次只接受一个连接。(不要问。)所以Comet正是我需要的模型。

我想要做的是在每个JSON块从服务器返回时解析它,然后清除responseText,这样我就可以继续使用相同的连接。但是,responseText是只读的。它不能通过我找到的任何方法直接清空。

这里有没有我漏掉的图片的一部分?有没有人知道当我读完responseText时可以用来释放它的小窍门?或者,服务器响应还有其他地方可以去吗?

我不包括代码,因为这几乎是一个与代码无关的问题。生成XHR并处理返回数据的Javascript例程非常非常简单。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-14 04:57:31

这就是长时间轮询的工作原理。您将索引保存到最后读取的行号中,并从该点开始读取间隔中的每一个滴答。这是一个很长的连接,因此是一个很长的响应。

一个新的responseText意味着一个新的连接。但那样它就不再是彗星了。)

票数 1
EN

Stack Overflow用户

发布于 2010-04-01 11:59:21

与其他响应相反,“长轮询”不是一个长连接。“长轮询”是许多按顺序进行的连接,每个连接设置为在不需要响应的情况下保持连接相当长的一段时间。它们确实会超时(通常在25-30秒左右),然后重新建立新的连接。由于HTTP1.1允许重用现有连接,因此无需重新协商连接,因此几乎可以立即重新建立连接。

所以,只要使用多个请求即可。由于重新建立连接的开销可以忽略不计,并且每个新连接都将使您能够销毁以前的响应文本,因此从性能/开销的角度来看,这是一个完全可行的解决方案,并且还将解决您的内存问题。

编辑作为WebSync的作者之一,我是从经验上讲的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1275818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档