内存分配和DOM元素

时间:2015-11-10 08:21:05

标签: javascript dom

在阅读关于内存管理的MDN文章(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management)时,我遇到了以下问题:说出来是对的

var e = document.getElementById('div_id'); 

分配 DOM元素?我在MDN文章中使用了相同的单词。在我看来这是不正确的,因为id =“div_id”的元素对象已经在内存中作为DOM树的一部分创建。因此var,只是引用它并且不分配新的内存。我是对还是不对?

谢谢

2 个答案:

答案 0 :(得分:2)

document.getElementById('div_id')不会为元素分配内存,因为它已存在于文档树中。

但是,您链接的文章实际上并未说明将分配内存。所以我认为文章没有任何问题。

分配的唯一内存是表达式e的变量var e = document.getElementById('div_id');。这种分配发生在堆栈中。对该元素的新引用被分配给e,这会占用内存(即使它的数量非常少)。堆中没有新的内存分配。

答案 1 :(得分:1)

是的,document.createElement('div/any tag');会创建新节点,因此必须为其分配内存。

我猜,文档中的内存管理正在讨论特定情况,如下所述。假设您创建了一个DOM元素

var myDom = document.createElement('dom'); //or consider array of dom objects
//attach dom objects to document using appendChild/insertBefore apis

//on some **event** you remove dom nodes from the document using removeChild api

但最后,如果您忘记了用于存储DOM节点的myDom / array object未被释放,则DOM对象仍将存在于内存中,即使它们未附加到了博士。

因此,如果您认为DOM不再使用,请指定myDom = null,这将使GC释放空间。

  

Doc不再需要内存时发布

     

大多数内存管理问题都来自此阶段。最艰巨的任务   这里是找到"不再需要分配的内存"。   通常需要开发人员确定程序中的位置   不再需要这样的内存并释放它。