JQuery Remove和内存泄漏

3

我正在开发一款游戏,发现内存消耗很大。我使用了jQuery animate,在动画完成后,我使用 .remove() 方法将元素从DOM树中移除。我的问题是:在将元素从DOM树中移除后,该对象仍然存在于内存中吗?

2个回答

8
Javascript是一种垃圾回收语言。这意味着当没有代码持有对内存中对象的引用时,该对象将被释放,并且(对于DOM对象)它不在DOM中。因此,当您从DOM中删除对象时,只要您的javascript的其他部分没有对该DOM对象的引用,该DOM对象就会被清理并在垃圾收集器有机会运行时将其内存返回给可用内存池。
请记住,当垃圾收集器释放内存时,它可能不会立即或永远返回给系统。它可能仍然作为分配给浏览器的内存,但它将可供浏览器内的其他内存请求使用。因此,在脚本中释放内存不一定会使浏览器使用的总内存量降低。
只有当重复执行相同操作导致浏览器使用的总内存不断增加时,才会出现内存泄漏。只有这样,您才可以确定某些内存被“泄漏”而被永久消耗。
关于垃圾回收还有许多细节,特别是对于旧版本的IE,但对于现代浏览器,您需要牢记的主要是,如果您在自己的javascript数据结构中持有对象的引用,它将不会被垃圾回收。如果您没有对它进行引用并且它不在DOM中,它将被释放并且其内存将被回收利用。

1
+1 关于浏览器使用的总内存不会下降的好处。 - JK.

4
如果没有对该元素的引用,垃圾回收将在下一次运行时清除它。您可以放心使用 .remove,不必担心垃圾回收问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接