魔鬼的夢魘 驗證IE中的js記憶體洩露模式(三)

2021-06-06 10:37:22 字數 844 閱讀 7644

魔鬼的夢魘—驗證ie中的js記憶體洩露模式(三)

按照justin rogers文章的順序,接下來的這個模式應該是跨頁記憶體洩露模式(cross-page leak),但是由於這個模式產生的中間物件,我們並不能訪問到,所以我也想不到好的有可視效果的驗證方式,所以就不介紹了,有興趣的話大家可以看一下原文;今天簡單的來學習這篇文章的最後乙個模式pesudo-leak。

很多時候一些api執行的時候的實際行為和被期望的行為會導致你無法斷定記憶體洩露的存在。pseudo-leak幾乎總是出現在進行動態指令碼操作的同個頁面內,並且當導航到乙個空白頁面後就很難察覺到洩露。我們需要做的就是怎樣斷定其不是跨頁記憶體洩露,然後檢測記憶體的消耗是否跟預期的相符。我們將會重寫script文字標籤作為驗證這個模式的例子。

就像dom的插入循序導致的問題一樣,這個洩露模式也是由於建立的臨時物件導致的洩露。通過一次又一次的重寫乙個script標籤內部的文字,這樣將會導致很多洩露的js物件被繫結到先前的內容中。

justin rogers在這個模式中給出的例子如下,我們同樣也無法測試洩露的存在。

memory leaking insert

根據以上**,我也寫了乙個測試例子,當第一次遍歷覆蓋script標籤內容的時候,我們宣告了乙個陣列,並將0壓入陣列,以後每次遍歷都將相應的迴圈變數的值壓入陣列,最後我們輸出陣列的所有元素。

執行的效果圖如下。

圖 1. 洩露驗證例子執行輸出結果

魔鬼的夢魘 驗證IE中的JS記憶體洩露 二

魔鬼的夢魘 驗證ie中的js記憶體洩露 二 閉包往往是需要為記憶體洩露負責的,因為使用它會很容易產生不為程式設計師所發現的迴圈引用。父函式的引數和區域性變數將會一直被凍結 引用和持有,知道閉包本身被釋放,這並不是顯而易見的。事實上閉包已經變成如此普遍的變成策略,以至於開發人員經常的深陷問題之中,但是...

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

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

程式中的魔鬼數字

在 中使用魔鬼數字 沒有具體含義的數字 字串等 將會導致 難以理解,應該將數字定義為名稱有意義的常量。將數字定義為常量的最終目的是為了使 更容易理解,所以並不是只要將數字定義為常量就不是魔鬼數字了。如果常量的名稱沒有意義,無法幫助理解 同樣是一種魔鬼數字。在個別情況下,將數字定義為常量反而會導致 更...