我试图找出为什么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文档,尽可能.