javascript記憶體泄露的問題一直以來都不受到大家的重視,原因是對使用者的影響沒有太實際的表現,或許近幾年記憶體發展迅速。指令碼記憶體再泄露也不會有太大影響。
當然作為前端開發的同學們,就不能有這樣的僥倖心理。出現memory leaks很大程度上是因為程式的不成熟和編碼不太規範造成的。不過,這裡就不說如何出現問題的,對問題的出現有興趣可以參考以下地址:
- Understanding and Solving Internet Explorer Leak Patterns
- IE's memory-leak fix greatly exaggerated
- Memory Leakage in Internet Explorer – revisited
這裡主要說說,目前幾個檢查javascript記憶體泄露的工具使用方法:
首先我們用到的工具有三個 Drip/sIEve ,Javascript Leaks Detector, leak monitor。其中前兩個是用於檢查ie的,leak monitor 是用來檢查firefox的情況的。這裡重點說一下ie下的這兩個工具,由於firefox的GC機制比ie強壯,只要ie的問題消除了,其他瀏覽器基本上不會有什麼問題。
1.Drip/sIEve
Drip和sIEve的作者應該是同一個人,連open souce上的項目都是在一起的。不過,平時我們主要使用sIEve就可以了,sIEve的功能比Drip強大一些
sIEve 介面很簡單,左側:內嵌了一個瀏覽器控制項,我可以訪問任何網址,下方還有個記憶體檢查,這樣我們可以方便看出記憶體的升降情況以及dom使用數量曲線。
右側面板,我們可以通過 Show in use 看到目前頁面使用的dom的情況,Show Leaks 可以看到記憶體泄露的dom。當然每次顯示泄露的情況必須是頁面重新整理後,看到上一個頁面的泄露情況。
同時通過右側的資料顏色,我們可以看到記憶體的升降和具體的數量級
-
不過sIEve的工作原理是對所有dom進行了一次hack,然後自己判斷那些dom沒有被釋放掉,但是具體的情況比較難分析出來。而且跟蹤有問題的dom需要一定技巧,對於大型的應用程式,跟蹤難度大。
不過用來檢測小模組的記憶體使用量情況還是一個不錯的選擇,特別是大項目模組細分後,對每個模組的單獨測試還是比較不錯的
謝謝懌飛同學提示的, Drip/sIEve:
http://home.orange.nl/jsrosman/
2. Javascript Leaks Detector
這是來自微軟GPDE團隊的一個小工具,下面簡稱JLD
官網: http://blogs.msdn.com/gpde/pages/javascript-memory-leak-detector.aspx
安裝後,我們可以在ie瀏覽器的 查看->瀏覽器欄中找到
JLD強大之處在於能夠類比IE6和IE7的GC情況,和真實的回收情況。這樣可以做一個比較。
這裡通常能只能反應IE6和IE7的理想情況,我們需要選擇下面Actual Leaks來反映當前瀏覽器的真實情況。
瀏覽器重新整理後,我們就可以看到上次頁面的結果了,綠色代表沒有發現記憶體泄露,紅色代表發現了記憶體泄露,藍色是當前載入完成的頁面,當然還有黑色,是指正在載入的網頁
當我們展開一個有問題的頁面時,
我們可以看到一個有問題分支Leaks.這裡列出了有問題的節點,同時還能幫我們列出出現問題的指令碼在什麼地方。
這點非常方便我們定位出泄露的問題所在。不過要使用指令碼調試,我們必須要開啟ie的指令碼調試功能
在ie選項的進階中,我們去掉這兩個勾即可
3. Leak Monitor
這是firefox上唯一一個檢查記憶體泄露的工具,不過這裡舜子不太推薦使用。因為firefox的記憶體GC機制比IE強悍,不必作為重點考慮對象。只要ie的問題能處理好,firefox上基本上也沒有什麼問題。而且有ie這兩個強悍的軟體幫忙基本上能解決大部分問題了。
可惜這個工具的體驗很糟糕,會讓人很有一種抓狂的感覺。如果您還要繼續嘗試可以到這裡下載: https://addons.mozilla.org/zh-CN/firefox/addon/2490
PS:原貼地址不明