IE 内存泄漏

IE的内存泄漏虽然早就名扬海内,但是没想到这次真的被它砸中了,一两年前写一的一个web应用,是放到手持终端上运行的,最近客户邮件说有一个页面连续执行了二三十次,IE就会崩溃。嗨,开始我还理直气壮的说:当初开发的时候就说明我们只保证PC上正常(应为没有拿到手持终端,作为开发测试机),现在PC上访问这个页面访问个四五十次都很正常啊。
回了邮件,程序调出来在运行一下,不看不知道,一看吓一跳,taskmanager里的IE内存使用量随着我鼠标的点击次数斜线上升啊,而且就像现在的物价一样,上去了就下不来了。看来肯定是javascript有问题。
有问题咋办google倒是发现了一片文章微软自己写的,“俺们有泄漏呀,俺们有泄漏,原理告诉你啊,咋办自己想!” 【[url]http://msdn.microsoft.com/en-us/library/bb250448(VS.85).aspx[/url]】
再来研究代码,把用过的变量全部都设置成NULL 不顶用。自己能控制的都控制住了,只有bafflo是拿来就用的。是不是这个里面有循环引用的问题?客户那边在催,这边要把bafflo的代码研究一遍这可太费事了。俺是懒人,想到了个懒主意,不就是循环引用么,俺把它的引用能断掉的都断掉不就得了,暴力破解!
javascrip的对象就是一棵树,深度优先遍历一把,把里面的对象都设置能null。想到就干:

var setNullObj_loop=['undefined','function']

function continueSkipSetNull(obj,field){
var typeo=""+typeof(obj);

if (obj==null) return true;
if (setNullObj_loop.include(typeo)){

return true;
}else{

}

return false
}

function setNullObj(obj,depth){
if (!depth) depth=4;
//var rs=""
if (continueSkipSetNull(obj)) return ;

for ( var o in obj){
if (continueSkipSetNull(obj[o],o)){
continue;
}
if (typeof(obj[o]) == "object"){
depth=depth-1;
if (depth>0){
setNullObj(obj[o],depth)
}
try{
obj[o]=null
}catch(ex){

}
}else{
try{
obj[o]=null;
}catch(ex){

}
}
}
obj=null

}



然后就把那些可疑的script对象都放到函数里面null 一把

setNullObj([userObj,buffalo,varCargoNo])


再来运行下,跑了三十遍,taskmanager里的IE 内存使用量就像上海那个倒塌的13层大楼一样,横在哪儿不起来了!嗯 交货。
客户的反馈让俺大吃一惊,他竟然在手持终端上搞了100个回合,回信说满意!太有毅力了,这样的测试人员很好很强大啊!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值