iframe中的彗星服务器数据是否正在积累?

我使用分块数据将[dos] something()[/ script]标签推入到我的慧星服务器的iframe中,但是脚本标签只能持续积累。 如何在每个脚本标签之后擦除它?

擦除脚本标记

PS:当你想擦拭脚本标签,可能会跟随iframe中的彗星服务器数据是否积累?

我相信你应该在某段时间后closures连接 ( 不好,请参阅iframe中的彗星服务器数据是否正在累积? ),这会自动释放与该请求相关联的内存。 那么你当然需要重新连接。 这个网页甚至说了其他的东西:

“页面stream”意味着浏览器几乎立即发现服务器的变化。 这就在浏览器中实时更新的可能性,并允许双向信息stream。 但是,这与标准的HTTP使用很不一样,这会导致一些问题。 首先,有不幸的内存影响,因为JavaScript不断累积,浏览器必须保留所有的页面模型。 在大量更新的丰富应用程序中,该模型将快速增长,并且在某个时候需要进行页面刷新,以避免硬盘交换或更糟糕的命运。

这build议重新加载页面,这也是一个选项。 但我认为closures连接(iframe)和重新连接也可能工作。

彗星有很多问题需要破解:

这就是为什么我再次推荐你使用socket.io(见下文),这将照顾所有这些废话。

Socket.io

我build议你使用socket.io ,这是非常好的产品。 它受到所有主stream浏览器的支持 。 正如你所看到的,它支持大量的传输(XHR,Websockets等),并select最好的浏览器提供最好的性能。

擦除脚本标记而不重新连接

当服务器打印块时,可以通过添加一些代码来删除脚本标记。

<script type="text/javascript"> // Calls your message handler app.handle("Hello World"); // Removes this script element var scripts = document.getElementsByTagName("script"), elem = scripts[scripts.length - 1]; elem.parentNode.removeChild(elem); </script> 

压缩版本

 <script type="text/javascript"> app.handle("Hello World"); (function(){var a=document.getElementsByTagName("script"),a=a[a.length-1];a.parentNode.removeChild(a)})(); </script> 

但是,隐藏Iframe或Forever Iframe太麻烦了,因为阿尔弗雷德提到。 就我个人而言,我认为这种古典的方式使彗星看起来无恩和无魅力。

jQuerystream

我的build议是使用jQuery Stream ,它通过WebSocket和HTTP协议提供统一的双向通信接口。 这是一个轻量级的客户端JavaScript库,如jQuery。

jQuery Stream使用的增强的Iframe传输在许多方面与传统的不同,它只需要包含消息而不是text / html响应的text / plain响应,并在每次处理时清空响应。

根据一些用户的testing ,使用增强的Iframe传输的Internet Explorer 8对于几兆字节的消息没有问题(不同于使用XMLHttpRequest作为传输的Firefox,这真的很困难)。

Interesting Posts