为什么在jQuery对象中包装HTML响应时IE泄漏内存?

前端之家收集整理的这篇文章主要介绍了为什么在jQuery对象中包装HTML响应时IE泄漏内存?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找出为什么IE在将 AJAX-ly请求的 HTML页面包装在jQuery对象中以进行处理时泄漏内存.用户可以访问页面,让它坐几分钟或几个小时,因此该页面每分钟使用jQuery的ajax方法获取新数据,然后用新的预渲染数据替换页面的重要部分.

在这一点上,我把它缩小到一个单一的调用 – 当$(数据)被调用来包装HTML字符串时,内存尖峰一点,似乎没有被垃圾回收.随着时间的推移,使用了几百MB,我被迫重新加载页面或重新启动IE.

This fiddle能够重现这个问题.它使用AJAX请求页面,然后在紧密循环中调用$(数据),以夸大泄漏. Chrome和Firefox似乎都像我所期待的那样(内存被回收),但IE的行为表现不佳.惊喜.

使用Process Explorer,在运行上述小提琴后,我看到内存消耗大幅上涨了两次.

我目前在标准模式下使用IE9.

为什么会发生这种情况?有解决方法吗?

更新

这是一个fiddle,演示了不使用AJAX的问题.

解决方法

我找到了解决上述问题的解决方法.

在排除故障时,我尝试了各种各样的事情,以防止泄漏发生.我想出的解决方案是使用$.ajax来检索数据和$()来包装结果.相反,我使用$(‘#destination’).load(‘sourceUrl #selector’)(见documentation)将数据推入隐藏的div,然后以这种方式操作结果.

结果是$.load使用封面下的$.parseHTML来操纵结果并将它们推送到指定的位置(而$()显然没有). See here为源线.

> $(htmlText)泄漏
> $(bodyText)不泄漏
> $.parseHtml(htmlText)缓慢泄漏(?)
> $.parseHtml(bodyText)不泄漏

这是一个fiddle演示.

我不知道为什么它的行为方式,但它的缺点似乎是:避免解析完整的HTML文档,尽可能.

猜你在找的jQuery相关文章