《浏览器内存泄漏》word版

《浏览器内存泄漏》word版

ID:22950688

大小:114.50 KB

页数:18页

时间:2018-11-02

《浏览器内存泄漏》word版_第1页
《浏览器内存泄漏》word版_第2页
《浏览器内存泄漏》word版_第3页
《浏览器内存泄漏》word版_第4页
《浏览器内存泄漏》word版_第5页
资源描述:

《《浏览器内存泄漏》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、浏览器内存泄露3.内存泄露的方式目前发现的可能导致内存泄露的代码有三种:循环引用自动类型装箱转换某些DOM操作下面具体的来说说内存是如何泄露的循环引用:这种方式存在于IE6和FF2中(FF3未做测试),当出现了一个含有DOM对象的循环引用时,就会发生内存泄露。什么是循环引用?首先搞清楚什么是引用,一个对象A的属性被赋值为另一个对象B时,则可以称A引用了B。假如B也引用了A,那么A和B之间构成了循环引用。同样道理如果能找到A引用BB引用CC又引用A这样一组饮用关系,那么这三个对象构成了循环引用。当一个对象引用自己时,它自己形成了循环引用。注

2、意,在js中变量永远是对象的属性,它可以指向对象,但决不是对象本身。循环引用很常见,而且通常是无害的,但如果循环引用中包含DOM对象或者ActiveX对象,那么就会发生内存泄露。例子:vara=document.createElement("div");varb=newObject();a.b=b;b.a=a;很多情况下循环引用不是这样的明显,下面就是著名的闭包(closure)造成内存泄露的例子,每执行一次函数A()都会产生内存泄露。试试看,根据前面讲的scope对象的知识,能不能找出循环引用?functionA()...{   var

3、a=document.createElement("div");   a.onclick=function()...{       alert("hi");   }}A();OK,让我们来看看。假设A()执行时创建的作用域对象叫做ScopeA找到以下引用关系ScopeA引用DOM对象document.createElement("div");DOM对象document.createElement("div");引用函数function(){alert("hi")}函数function(){alert("hi")}引用ScopeA这样就很清

4、楚了,所谓closure泄露,只不过是几个js特殊对象的循环引用而已。自动类型装箱转换:这种泄露存在于ie6ie7中。这是极其匪夷所思的一个bug,看下面代码vars="lalalalala";alert(s.length);这段代码怎么了?看看吧,"lalalalala"已经泄露了。关键问题出在s.length上,我们知道js的类型中,string并非对象,但可以对它使用.运算符,为什么呢?因为js的默认类型转换机制,允许js在遇到.运算符时自动将string转换为object型中对应的String对象。而这个转换成的临时对象100%会

5、泄露(汗一下)。某些DOM操作也可能导致泄露这些恶心的bug只存在于ie系列中。在ie7中因为试图fix循环引用bug而让情况变得更糟,以至于我对写这一段种满了恐惧。从ie6谈起,下面是微软的例子,          ...18浏览器内存泄露       functionLeakMemory()       ...{           varhostElement=document.getElementById("hostElement");          

6、 //Doitalot,lookatTaskManagerformemoryresponse           for(i=0;i<5000;i++)           ...{               varparentDiv=                   document.createElement("");               varchildDiv=                   document.createElement("

7、)'>");               //Thiswillleakatemporaryobject               parentDiv.appendChild(childDiv);               hostElement.appendChild(parentDiv);               hostElement.removeChild(parentDiv);               parentDiv.removeChild(childDiv);               parentDiv=nu

8、ll;               childDiv=null;           }           hostElement=null;       }       functionC

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。