Javascript内存管理陷阱?

e-s*_*tis 22 javascript garbage-collection memory-management

我知道Javascript有一个垃圾收集器.因此,使用delete删除对该对象的引用,并且当没有对该对象的引用时,它将被GC删除.

Javascript很棘手,有闭包,模糊名称空间和原型继承,知道何时到现在或为什么并不总是显而易见的.

我正在编写一个相当大的Javascript项目,并希望避免内存泄漏,同时限制全局内存使用.我根本没有处于优化阶段(让我们先把这些东西搞定:-)),但是为了避免编写糟糕的代码,知道内存管理的良好实践会很好.

  • 那我什么时候应该使用删除
  • 使用物体我应该避免什么陷阱?
  • 关于闭包的一些事情?
  • 一些好的做法要突出?

Bri*_*zel 10

根据我的经验,根据浏览器的不同,垃圾收集器的实现很差/很差.应用良好的面向对象编程实践是一个良好的开端.

我唯一的建议是:不要通过连接DOM和javascript对象来创建内存泄漏(循环引用不会被DOM和JS GC清除).这些错误将占用比您在应用程序中实例化的任何对象多得多的内存.

有关DOM/JS内存泄漏的更多详细信息. http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx


Mar*_*ius 5

  • 在IE中,至少在旧版本中,如果DOM元素附加了事件监听器,则在使用removeChild将其删除后,将其保留在内存中.从内存中删除它的唯一方法是在将事件从DOM中删除之前分离事件.
  • 只要您不经常创建和删除元素,您就不必担心这一点.如果在应用程序启动时创建了许多元素,但之后没有创建新对象,那么不要过多担心内存泄漏.


Gre*_*reg 3

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

this.element = document.getElementById('something');
this.element.attachedObject = this;
Run Code Online (Sandbox Code Playgroud)