IE浏览器内存泄露检测工具

来源:互联网 发布:股市大数据数据宝app 编辑:程序博客网 时间:2024/05/12 14:57

        随着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/
        这是一款独立的桌面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树上的泄露对象。建议升级到IE8的浏览器模式下。
优点:包含泄露定位功能。
缺点:对于复杂的Javascript代码,无法准确定位泄露位置。

原创粉丝点击