[英]Memory allocation and DOM elements
在閱讀有關內存管理的MDN文章( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management )時,我遇到了以下問題:說的對嗎?
var e = document.getElementById('div_id');
分配一個DOM元素? 我在MDN文章中使用了相同的詞語。 在我看來,這是不對的,因為id =“ div_id”的element-object已作為DOM樹的一部分在內存中創建。 因此,var e僅引用它,而不分配新的內存。 我說的對嗎?
謝謝
document.getElementById('div_id')
不會為元素分配內存,因為它已經存在於文檔樹中。
但是,您鏈接的文章實際上並沒有說會分配內存。 因此,我認為本文沒有任何問題。
該被分配的唯一的存儲器是用於可變e
表達的var e = document.getElementById('div_id');
。 這種分配發生在堆棧中。 對元素的新引用分配給e
,這會消耗內存(即使它很小)。 堆中不會發生新的內存分配。
是的, 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 : 當不再需要內存時釋放
大多數內存管理問題都在此階段出現。 這里最困難的任務是查找何時“不再需要分配的內存”。 開發人員通常需要確定程序中不再需要該內存的位置,然后釋放它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.