javascript内存泄漏

发布时间:2016-12-7 22:40:12 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"javascript内存泄漏",主要涉及到javascript内存泄漏方面的内容,对于javascript内存泄漏感兴趣的同学可以参考一下。

网搜结果: 1、循环引用(Circular References) — IE浏览器的COM组件产生的对象实例和网页脚本引擎产生的对象实例相互引用,就会造成内存泄漏。  这也是Web页面中我们遇到的最常见和主要的泄漏方式;  举例: DOM对象与JS对象相互引用。范例:  function Encapsulator(element) {  this.elementReference = element;  element.myProp = this;  }  new Encapsulator(document.getElementById('myDiv'));  解决方法:  在onunload事件中写上: document.getElementById('myDiv').myProp = null;  2、内部函数引用(Closures) — Closures可以看成是目前引起大量问题的循环应用的一种特殊形式。由于依赖指定的关键字和语法结构,  Closures调用是比较容易被我们发现的;   举例: a、给DOM对象添加的属性是一个对象的引用。范例:  var MyObject = {};  document.getElementById('myDiv').myProp = MyObject;  解决方法:  在window.onunload事件中写上: document.getElementById('myDiv').myProp = null;  b、给DOM对象用attachEvent绑定事件。范例:  function doClick() {}  element.attachEvent("onclick", doClick);  解决方法:  在onunload事件中写上: element.detachEvent('onclick', doClick);  3、页面交叉泄漏(Cross-Page Leaks) — 页面交叉泄漏其实是一种较小的泄漏,它通常在你浏览过程中,由于DOM插入顺序引起。下面我们  会讨论DOM插入顺序的问题,在那个示例中你会发现只需要改动少量的代码,我们就可以避免对象薄计对对象构建带来的影响;  举例: 从外到内执行appendChild。这时即使调用removeChild也无法释放。范例:  var parentDiv = document.createElement("div");  var childDiv = document.createElement("div");  document.body.appendChild(parentDiv);  parentDiv.appendChild(childDiv);  解决方法:  从内到外执行appendChild:  var parentDiv = document.createElement("div");  var childDiv = document.createElement("div");  parentDiv.appendChild(childDiv);  document.body.appendChild(parentDiv);  4、貌似泄漏(Pseudo-Leaks) — 这个不是真正的意义上的泄漏,不过如果你不了解它,你可能会在你的可用内存资源变得越来越少的时候很郁闷 举例: 反复重写同一个属性会造成内存大量占用(但关闭IE后内存会被释放)。范例:  for(i = 0; i < 5000; i++) {  hostElement.text = "asdfasdfasdf";  }  这种方式相当于定义了5000个属性!  解决方法:  其实没什么解决方法:P~~~就是编程的时候尽量避免出现这种情况咯~~  参考文章:http://www.cnblogs.com/carekee/articles/1733847.html

上一篇:LeetCode:Longest Valid Parentheses
下一篇:常见浏览器兼容性问题与解决方案

相关文章

相关评论