js在IE中的記憶體釋放問題

2021-08-23 15:13:59 字數 1476 閱讀 8899

在ie下的js程式設計中,以下的程式設計方式都會造成即使關閉ie也無法釋放記憶體的問題,下面分類給出:

1、給dom物件新增的屬性是乙個物件的引用。範例:

var myobject = {};

document.getelementbyid('mydiv').myprop = myobject;

解決方法:

在window.onunload事件中寫上: document.getelementbyid('mydiv').myprop = null;

2、dom物件與js物件相互引用。範例:

function encapsulator(element)

new encapsulator(document.getelementbyid('mydiv'));

解決方法:

在onunload事件中寫上: document.getelementbyid('mydiv').myprop = null;

3、給dom物件用attachevent繫結事件。範例:

function doclick() {}

element.attachevent("onclick", doclick);

解決方法:

在onunload事件中寫上: element.detachevent('onclick', doclick);

var parentdiv = document.createelement("div");

var childdiv = document.createelement("div");

解決方法:

var parentdiv = document.createelement("div");

var childdiv = document.createelement("div");

5、反覆重寫同乙個屬性會造成記憶體大量占用(但關閉ie後記憶體會被釋放)。範例:

for(i = 0; i < 5000; i++)

這種方式相當於定義了5000個屬性!

解決方法:

其實沒什麼解決方法:p~~~就是程式設計的時候盡量避免出現這種情況咯~~

說明: ... e_leak_patterns.asp

2、對於第一條,事實上包括 element.onclick = funcref 這種寫法也算在其中,因為這也是乙個對物件的引用。在頁面onunload時應該釋放掉。

3、對於第三條,在msdn的英文說明中好像是說即使呼叫detachevent也無法釋放記憶體,因為在attachevent的時候就已經造成記憶體「leak」了,不過detachevent後情況還是會好一點。不知道是不是這樣,請英文好的親能夠指出。

4、在實際程式設計中,這些記憶體問題的實際影響並不大,尤其是給客戶使用時,客戶對此絕不會有察覺,然而這些問題對於程式設計師來說卻始終是個心病 --- 有這樣的bug心裡總會覺得不舒服吧?能解決則給與解決,這樣是最好的。事實上我在webfx.eae.net這樣頂級的js原始碼站點中,在它們的原始碼裡都會看到採用上述解決方式進行記憶體的釋放管理。

在IE下的JS程式設計需注意的記憶體釋放問題

在ie下的js程式設計中,以下的程式設計方式都會造成即使關閉ie也無法釋放記憶體的問題,下面分類給出 1 給dom物件新增的屬性是乙個物件的引用。範例 var myobject document.getelementbyid mydiv myprop myobject 解決方法 在window.on...

js堆疊記憶體的釋放

js中的堆疊記憶體 俗稱叫做作用域 全域性作用域 私有作用域 為js 提供執行的環境 執行js 的地方 基本資料型別值是直接存放在棧記憶體中的 堆記憶體 儲存引用資料型別值的 相當於乙個儲存的倉庫 物件儲存的是鍵值對 函式儲存的是 字串 在專案中,我們的記憶體越少效能越好,我們需要把一些沒用的記憶體...

STL中Vector的記憶體釋放問題

vector是stl中最常見的模板之一,其記憶體是連續的。vector的大小有size和capacity之別,記憶體可以動態增長。vector呼叫clear 之後,只會把size設定為0,而記憶體空間並沒有釋放。vector 中的內建有記憶體管理,當 vector 離開它的生存期的時候,它的析構函式...