1 / 16
文档名称:

Js内存泄漏及解决方案.docx

格式:docx   页数:16页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Js内存泄漏及解决方案.docx

上传人:yixingmaoj 2016/4/25 文件大小:0 KB

下载得到文件列表

Js内存泄漏及解决方案.docx

相关文档

文档介绍

文档介绍:在IE下的 JS编程中,以下的编程方式都会造成即使关闭 IE也无法释放内存的问题,下面分类给出: 1、给 DOM 对象添加的属性是一个对象的引用。范例: var MyObject ={}; ('myDiv').myProp =MyObject; 解决方法: 事件中写上:('myDiv').myProp =null; 2、DOM 对象与 JS对象相互引用。范例: function Encapsulator(element) { =element; =this; }new Encapsulator(('myDiv')); 解决方法: 在onunload 事件中写上:('myDiv').myProp =null; 3、给 DOM 对象用 attachEvent 绑定事件。范例: function doClick() {} ("onclick", doClick); 解决方法: 在onunload 事件中写上:('onclick', doClick); 4、从外到内执行 appendChild 。这时即使调用 removeChild 也无法释放。范例: var parentDiv =("div"); var childDiv =("div"); (parentDiv); (childDiv); 解决方法: 从内到外执行 appendChild: var parentDiv =("div"); var childDiv =("div"); (childDiv); (parentDiv); 5、反复重写同一个属性会造成内存大量占用(但关闭 IE后内存会被释放)。范例: for(i =0;i<5000; i++) { ="asdfasdfasdf"; }这种方式相当于定义了 5000 个属性! 解决方法: 其实没什么解决方法:P~~~ 就是编程的时候尽量避免出现这种情况咯~~ 说明: 1、以上资料均来源于微软官方的 MSDN 站点,链接地址: http://msdn./librar ... 大家可以到上面这个地址中看到详细的说明,包括范例和图例都有。只是我英文不太好,看不太懂,如果我上述有失误或有需要补充的地方请大家指出。 2、对于第一条,事实上包括 =funcRef 这种写法也算在其中, 因为这也是一个对对象的引用。在页面 onunload 时应该释放掉。 3、对于第三条,在MSDN 的英文说明中好像是说即使调用 detachEvent 也无法释放内存,因为在 attachEvent 的时候就已经造成内存“LEAK ”了,不过 detachE vent 后情况还是会好一点。不知道是不是这样,请英文好的亲能够指出。 4、在实际编程中,这些内存问题的实际影响并不大,尤其是给客户使用时,客户对此绝不会有察觉,然而这些问题对于程序员来说却始终是个心病--- 有这样的 BUG 心里总会觉得不舒服吧?能解决则给与解决,这样是最好的。事实上我在webfx. 这样顶级的 JS源码站点中,在它们的源码里都会看到采用上述解决方式进行内存的释放管理。理解并解决 IE的内存泄漏方式 Web 开发的发展在过去一些的时候,Web 开发人员并没有太多的去关注内存泄露问题。那时的页面间联系大都比较简单,并主要使用不同的连接地址在同一个站点中导航,这样的设计方式是非常有利于浏览器释放资源的。即使 Web 页面运行中真的出现了资源泄漏,那它的影响也是非常有限而且常常是不会被人在意的。今天人们对Web应用有了高更的要求。一个页面很可能数小时不会发生URL跳转, 并同时通过 Web 服务动态的更新页面内容。复杂的事件关联设计、基于对象的 JScript 和DHTML 技术的广泛采用,使得代码的能力达到了其承受的极限。在这样的情况和改变下,弄清楚内存泄露方式变得