看似很少,积少成多也不得了,在1,2类泄漏解决完后,就要面对这样的问题了。
4. 浏览器自身比较恶心的bug
虽然JS&Dom循环引用无法释放也算是浏览器的bug,但好像不只是IE独有,所以没有归到此类。
目前我已经知道的IE的两个很恶心的bug:
1. IE Object leaks
简单点描述,就是IE下,将JS对象的属性delete掉后,属性引用的对象是会解除引用,但属性本身占用的内存不会释放。虽然增长很少,但在极端情况也绝不能无视。
2. IE 8 bug
在IE8下,form, button, input, select, textarea, a, img, object这些Dom节点,只要创建了就不会被释放掉(其实在IE6/7下,form节点也会有问题)。
二、泄漏检查
1. 组件泄漏
这个比较简单,可以写个函数记录Ext.ComponentMgr.all(Ext.util.MixedCollection)中的组件列表,从而判断哪些组件还没有被销毁。
2. 组件内部泄漏
这个就要用sIEve查看了。创建、销毁组件,看Dom列表有无没释放的。
3. JS对象泄漏
当有个内存无法释放的问题,使用sIEve又检查不出Dom节点泄漏,一般就是JS对象的问题了
只能用笨办法:逐步排除
一种是使用Firefox + firebug,直接展开JS对象,查找属性有没有无限制增长。
再一种就是使用IE6/7,调快逻辑执行,长时间运行,记录任务管理器中显示的虚拟内存(不能用其它浏览器,经测试FF和Chrome缓存很厉害,很难测出增长。也不能用sIEve,它监控内存及dom数量时也会造成内存增长,IE8有些bug会影响判断),看有无无限制增长。