簡體   English   中英

內存分配和DOM元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM