IE瀏覽器內存泄露檢測工具

 隨着Web2.0技術的發展,富客戶端的應用可以說是越來越多,給各個瀏覽器造成很大的壓力。以前的測試可能只關注於服務器端,如今卻需要研究瀏覽器端的資源使用情況,如CPU利用率、響應時間和內存佔用。根據實際測試中的結果,有相當多的JavaScript代碼編寫存在缺陷,導致代碼在IE瀏覽器時發生內存泄露,有關泄露的原理,可以參考微軟網站上的一篇技術文章,《Understanding and Solving Internet Explorer Leak Patterns》,說白了,就是因爲Dom和javaScript採用不同的垃圾回收機制,所以出現了各種泄露。需要說明的是,基本上在IE上出現的泄露代碼在FireFox不會出現,IE的瀏覽器組件根本上是一個COM組件,採用計數回收,FireFox在這方面做的比較好,不過我發現即使沒有泄漏,但是FireFox運行一段時間會響應慢、CPU高等,令人鬱悶…說遠了,回到正題。

目前IE的常用內存泄露工具主要有兩個:sIEve和IE JavaScript Memory Leak Detector。

  • sIEve

官方網站: http://home.wanadoo.nl/jsrosman/

下載:Download sIEve-0.0.8.exe

這是一款獨立的桌面exe程序,無需安裝,內部嵌入了一個IE 瀏覽器控件,用戶可以通過該控件訪問需要測試的網頁。

這款工具源於Sourceforge的開源項目ieleak,但不知爲何後來開發停滯了,沒有版本的更新,只能看到留下的源代碼。

從代碼中可以看出,sIEve監控DOM對象中的引用數目,如果在頁面卸載之後,還存在引用大於0的DOM對象,它就會顯示這些DOM對象,同時還會實時的顯示在用戶操作的時候內存和DOM泄露的情況。

優點:有源代碼、可以參考學習,獨立工具,無需安裝。我記得看過一則新聞,IE8發佈時,IE的開發經理還建議開發人員使用sIEve調試內存泄漏情況。

缺點:只能提供沒有釋放的DOM對象,但是不知道DOM對象是javaScript代碼在何時何處導致泄漏的,無法定位泄露原因;版本沒有更新。

  • IE JavaScript Memory Leak Detector

官方網站:http://blogs.msdn.com/gpde/pages/javascript-memory-leak-detector.aspx

這款工具由微軟的內部員工開發,功能看起來比sIEve要強大。

IE JavaScript Memory Leak Detector需要安裝,作爲IE的插件形式存在,可以在工具欄的菜單中啓用和關閉,啓動之後在IE的下端出現一個工作窗口。

這個工具將監控代碼注入到了IE瀏覽器中的動態鏈接庫中,IE在做DOM或者JavaScript解釋時,工具都會截獲、記錄並轉發,IE並沒有意識到IE JavaScript Memory Leak Detector的存在。

用戶可以在IE中打開IE JavaScript Memory Leak Detector,然後訪問需要測試的網頁,在切換網頁時,IE JavaScript Memory Leak Detector會報告可疑的內存泄露,包括泄露的DOM對象,引起泄漏的引用代碼和代碼出處,這個工具對於簡單的javascript代碼毫無疑問是非常好用的,但是我在實際使用當中發現對於複雜的代碼,如使用了dojo工具包的Javascrpt代碼,即使發生了內存泄露,引起泄漏的引用代碼和代碼出處這兩項功能很難派上用場,最後都會指向dojo的源文件,而且指的位置也可能出錯,比如定位到了註釋上,汗….

遺憾的是,這個工具除了beta版之後,再也沒有更新。

另外,IE JavaScript Memory Leak Detector可以分別模擬IE6/IE7的泄露情況,根本區別是IE7對內存泄露問題的一大進步是可以回收所有attach到DOM樹上的泄露對象。

優點:包含泄露定位功能。

缺點:對於複雜的Javascript代碼,無法準確定位泄露位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章