IE8中的記憶體洩露

2021-08-30 12:42:29 字數 1120 閱讀 5878

最近開發的時候對頁面使用了定時的區域性更新,結果在ie6,7和firefox下,一切正常,而在ie8下過上幾個小時就瀏覽器就崩潰了,顯示是記憶體溢位,我以為是**寫的不好導致記憶體洩露,但是ie6,7又正常,調查了一下,原來這是ie8的bug。

[size=large]問題點[/size]

在ie8中,生成特定dom節點所占用的記憶體是不會被釋放的,即使這些節點被刪除記憶體也不會被釋放。

記憶體洩露的節點型別包括:form、button、input、select、textarea、a、img和objec

其他的大部分節點型別是不會洩露的,例如:span、div、p、table等等。

此問題只發生在ie8,其他瀏覽器不發生。

如果使用者按了f5,ie8會重新重新整理頁面,首先它會unload window.top,這時候會釋放掉記憶體。如果頁面是iframe,則unload此iframe,沒有任何反應。看起來只有window.top被 unload,記憶體才會被釋放。

[size=large]例子[/size]

例1執行下面的**,ie8就會洩露記憶體。

function leak1()

注意:* 此例子新增了節點,所以會洩露。

* 在中有個div,id為「to_area」。

* 提醒一下,這裡沒有閉包和迴圈引用。

例2下面的**沒有使用innerhtml,但是還是會洩露

注意:* from_area 是form的id,而且這裡也沒有閉包和迴圈引用。

例3這是最簡單,最直接的例子:

注意:* 如果用span來代替img,就不會有洩露了。

這些例子只在ie8中洩露記憶體,我在windows xp, windows vista, windows server 2008, windows server 2008 r2和windows 7 中的ie8都作了測試,而且使用了ie8中的ie7相容模式和標準模式,每種情況下都會洩露。

測試頁面

[size=large]關於洩露[/size]

記憶體大小隨著時間的推移而增長,但這並不直接導致瀏覽器崩潰。瀏覽器使用的記憶體好像是有上限的,它似乎會從某些內部手段來限制dhtml使用的記憶體。

記憶體到達上限後,瀏覽器會自動處理,例如彈出對話方塊,顯示記憶體不足。

IE 8記憶體保護

這兩天幫乙個朋友做乙個網頁的測試,這個網頁需要用到activex控制項。按說不應該有啥問題的,但每次我這邊開啟這個網頁就報告錯誤,就是將要彈出那個要求安裝載入項的時候 我開始沒有在意,覺得是不是這個載入項有什麼問題或者其他什麼原因。但昨天還是決意了解一下到底咋回事 原來是因為我前不久剛安裝了最新的i...

IE 8記憶體保護

這兩天幫乙個朋友做乙個網頁的測試,這個網頁需要用到activex控制項。按說不應該有啥問題的,但每次我這邊開啟這個網頁就報告錯誤,就是將要彈出那個要求安裝載入項的時候 我開始沒有在意,覺得是不是這個載入項有什麼問題或者其他什麼原因。但昨天還是決意了解一下到底咋回事 原來是因為我前不久剛安裝了最新的i...

IE記憶體洩露小結

師姐安排我做乙個很簡單,但是很麻煩的工作,檢測ie記憶體洩露,記憶體洩露的方式不是很多,但是要真正查詢到錯誤源不是很容易。檢測記憶體洩露的時候,使用的工具是drip0.5,在檢測洩露的時候,有個很令人氣憤的事情,在我的t41上檢測不出來,但在t61上報 了好多錯,令我很尷尬!經過檢測,現總結經驗如下...