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

我试图找出为什么IE在将 AJAX-ly请求的 HTML页面包装在jQuery对象中以进行处理时泄漏内存.用户可以访问页面,让它坐几分钟或几个小时,因此该页面每分钟使用jQuery的ajax方法获取新数据,然后用新的预渲染数据替换页面的重要部分.

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

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

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

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

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

更新

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

解决方法

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

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

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

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

这是一个fiddle演示.

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

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...