JavaScript中的内存管理陷阱?(Javascript memory management p

2019-07-20 21:51发布

我知道,JavaScript有一个垃圾收集器。 为此,使用delete删除只对对象的引用,当没有更多的参考这个对象,它是由GC删除。

JavaScript是棘手的,与封锁,模糊名称空间和原型继承,它并不总是显而易见的,知道什么时候到现在为什么。

我编码一个相当大的Javascript项目,并想避免内存泄漏,同时限制全局内存使用情况。 我不是在所有优化阶段(让我们的东西工作第一:-)),但它会很高兴知道,以避免编写蹩脚的代码的内存管理的良好做法。

  • 所以,当我应该使用删除
  • 什么是陷阱,我应该避免,使用对象?
  • 有些东西知道关闭?
  • 一些好的做法,突出?

Answer 1:

从我的经验,垃圾收集器是井/取决于浏览器执行不力。 运用良好的面向对象的编程习惯是一个好的开始。

我唯一的建议是: 不要通过连接DOM和内存泄漏的JavaScript对象 (即不会被DOM和JS的GC被清除循环引用)。 这些错误会吃比你将你的应用程序中实例化的任何对象远远更多的内存。

在DOM / JS内存泄漏的更多细节。 http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx



Answer 2:

  • 在IE浏览器,至少在旧版本中,一个DOM元素被保存在内存中删除您使用removeChild之,如果它有附加的事件侦听器之后。 从内存中删除它的唯一方法是从DOM中删除之前,拆下事件。
  • 只要你不创建和经常删除元素,你真的不担心这一点。 如果你创建大量元素的应用程序启动时,但不创建之后新的对象,然后不要太担心内存泄漏。


Answer 3:

我认为,通过将数据存储在DOM节点,你可以轻松地创建循环引用,并非所有浏览器都可以处理。 例如:

this.element = document.getElementById('something');
this.element.attachedObject = this;


文章来源: Javascript memory management pitfalls?