gpt4 book ai didi

javascript - Comet、responseText 和内存使用

转载 作者:搜寻专家 更新时间:2023-11-01 04:12:02 24 4
gpt4 key购买 nike

有没有办法在不破坏 XHR 对象的情况下清除 XHR 对象的 responseText?

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

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

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

我在这里缺少图片的一部分吗?有谁知道我读完后可以用来释放 responseText 的任何技巧吗?或者还有其他服务器响应可以去的地方吗?

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

最佳答案

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

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

[编辑] 作为 WebSync 的作者之一,我是根据经验说的.

关于javascript - Comet、responseText 和内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1275818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com