Ie内存回收分为两种情况,对事件的回收,和对节点的回收。
jQuery 的Remove对节点的回收是 有问题的。会形成许多dom孤点。多次循环后内存会有轻微增加。并不影响太大。

而jQuery对事件的回收,这里,并不是这么容易产生内存泄漏的。要具备两个条件:
1.dom节点其它对象(activex object,dom,object)产生循环引用,其实是交叉引用。而非object引用object(jQuery),起因ie中对dom的内存管理和js的内存管理并不是一套机制。
2.当这个dom节点被”简单“删除后,就会表象成内存泄漏,刷新也无法回收。

如果按照这样(leak1.html 附件,这里就是标准的内存泄漏)的引用,的确会有问题,内存会激增,并且刷新也无法回收。

但我们知道jquery中的dom节点,一般是被封装在了$()中,我们用的事件绑定不再是简单的交叉引用。

在这个环节中,它已经被转变成为js的对象间的引用,从Ie6到ie8其实都已经处理的很完全。而jQuery最后也适时的完成了cleanData和removeEvent. 内存可以回收,也不存在泄漏。(leakj.html,请自已拷jquery的js文件引用。)

上面的图和分析可以看出来,jqery在事件的内存回收方面是没有问题的。附件供大家参考。
以上的结果可以用ie的内存监测工具,比如 Drip或sIEve之类的。
posted @ 2010-12-20 15:10 simon4545 Views(169) Comments(1)
Edit