|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。在IE下的JS编程中,以下的编程体例城市形成即便封闭IE也没法开释内存的成绩,上面分类给出:
1、给DOM对象增加的属性是一个对象的援用。典范:
varMyObject={};
document.getElementById(myDiv).myProp=MyObject;
办理办法:
在window.onunload事务中写上:document.getElementById(myDiv).myProp=null;
2、DOM对象与JS对象互相援用。典范:
functionEncapsulator(element){
this.elementReference=element;
element.myProp=this;
}
newEncapsulator(document.getElementById(myDiv));
办理办法:
在onunload事务中写上:document.getElementById(myDiv).myProp=null;
3、给DOM对象用attachEvent绑定事务。典范:
functiondoClick(){}
element.attachEvent("onclick",doClick);
办理办法:
在onunload事务中写上:element.detachEvent(onclick,doClick);
4、从外到内实行appendChild。这时候即便挪用removeChild也没法开释。典范:
varparentDiv=document.createElement("div");
varchildDiv=document.createElement("div");
document.body.appendChild(parentDiv);
parentDiv.appendChild(childDiv);
办理办法:
从内到外实行appendChild:
varparentDiv=document.createElement("div");
varchildDiv=document.createElement("div");
parentDiv.appendChild(childDiv);
document.body.appendChild(parentDiv);
5、重复重写统一个属性会形成内存大批占用(但封闭IE后内存会被开释)。典范:
for(i=0;i<5000;i++){
hostElement.text="asdfasdfasdf";
}
这类体例相称于界说了5000个属性!
办理办法:
实在没甚么办理办法:P~~~就是编程的时分只管制止呈现这类情形咯~~
申明:
1、以上材料均来历于微软官方的MSDN站点,链接地点:
http://msdn.microsoft.com/librar...e_leak_patterns.asp
人人能够到下面这个地点中看到具体的申明,包含典范和图例都有。只是我英文不太好,看不太懂,假如我上述有掉误或有必要增补的中央请人人指出。
2、关于第一条,现实上包含element.onclick=funcRef这类写法也算在个中,由于这也是一个对对象的援用。在页面onunload时应当开释失落。
3、关于第三条,在MSDN的英文申明中仿佛是说即便挪用detachEvent也没法开释内存,由于在attachEvent的时分就已形成内存“LEAK”了,不外detachEvent后情形仍是会好一点。不晓得是否是如许,请英文好的亲可以指出。
4、在实践编程中,这些内存成绩的实践影响其实不年夜,特别是给客户利用时,客户对此毫不会有发觉,但是这些成绩关于程序员来讲却一直是个芥蒂---有如许的BUG内心总会以为不恬逸吧?能办理则授与办理,如许是最好的。现实上我在webfx.eae.net如许顶级的JS源码站点中,在它们的源码里城市看到接纳上述办理体例举行内存的开释办理。
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。 |
|