`
yellowhat
  • 浏览: 16113 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JS 内存溢出,调试工具介绍

阅读更多

说明: 本篇内容摘自本站一位仁兄的,在这里加贴是为了做点补充并上传附件方便后来的朋友下载和学习。

   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

以下是关于JavaScript Memory Leak Detector 的使用与介绍

Introduction
JavaScript Memory Leak Detector (download) is a debugging tool to detect memory leaks and enforce best practices in JavaScript code when working with version of Internet Explorer older than IE8.

As described in detail in this MSDN article the JScript garbage collector in previous versions of Internet Explorer manages the lifetime of JScript objects but not of DOM objects. As a result, the JScript garbage collector cannot break circular references between DOM objects and JScript objects, and memory leaks may occur.

In IE6, these circular references are broken when the Internet Explorer process terminates (and leaks are very frequent).
In IE7, these circular references are broken when users navigate away from the page.
In IE8 the problem is completely mitigated. (Read here for more details).
Programmers who need to support older versions of the Internet Explorer browser should still try to pay attention to programming patterns such as JScript closures, as they could cause memory leaks.

The leak detector works hosting an IE WebBrowser control and intercepting the execution of JavaScript inside IE. It monitors al the DOM elements in the markup of a web document that somehow interact with JavaScript and presents a list of potentially leaked objects to the user, together with information about the scripts loaded in the page and, if possible, a hint to the instruction that may have caused the leak.

Installation notes
IEJSLeaksDetector is a plain, native, Windows application and does not require any particular setup (the executable can be just unzipped and run).
It only runs in 32 bit versions of Windows. 64 bits editions are not supported yet.

There are only two installation steps required to make sure that the tool works correctly:

1. The tool requires that the pdm.dll script installer is installed in the machine. This DLL is normally installed with any version of Microsoft Visual Studio.In case you are unable to install Visual Studio in the target machine, a simpler way to install pdm.dll is by installing the Microsoft Script Debugger, freely downloadable here.

2. The tool also requires Internet Explorer script debugging to be enabled to work correctly. Verify that the check box "Disable script debugging (Other)" is unchecked, in IE ('Tools' menu -> Internet Options -> 'Advanced' tab -> 'Browsing' section) as shown in figure.

How to use the tool
The user can start the memory profiling of a web application navigating to the desired URL. A new tab is opened with a WebBrowser control and a tree view shows all the documents and scripts that compose the current page.
When the user has finished to interact with the page he can click the "Stop" button, which causes the tool to close the control and track possible leaks.
Memory leaks are listed specifying the DOM object's type and a list of "attached" JavaScript objects whose circular reference could be the cause of the leak. The tool also shows the call stack correponding to a memory leak, which represents the state of the script at the moment when the JavaScript object was attached to the DOM object. Finally, a script window highlights the exact point in the JavaScript code where the memory leak originated.
More information can be found in the docs enclosed with the binaries.


Posted: Monday, August 03, 2009 11:28 AM by eurojobs
Filed under: JavaScript, Internet Explorer, Debugging tools
Comments
nora said: 
Thank you new version release!

so,is JavaScript Memory Leak Detector (v2) supported protetype.js which isn't supported by previous version ?

thanks.

# September 1, 2009 8:15 AM
eurojobs said: 
nora,

Thanks for your interest!

I don't have 'protetype.js' to run a test, but the new version should be considerably more stable than the previous one.

But please, let me know if you find any problem.

# September 1, 2009 9:35 AM
New Comments to this post are disabled

分享到:
评论

相关推荐

    处理pdfmarker中文乱码及内存溢出的处理

    综上所述,处理PDFMaker中的中文乱码问题主要涉及设置正确的字符编码,而内存溢出则需要通过优化代码、限制内存使用和使用适当的工具进行调试。在使用PDFMaker或其他类似工具时,理解并应用这些技巧将有助于提高代码...

    node-memory-leak-tutorial, 在节点中,调试内存泄漏的教程.zip

    node-memory-leak-tutorial, 在节点中,调试内存泄漏的... 中调试内存泄漏的快速教程步骤 1: 安装调试工具首先,你需要安装 v8-profiler 模块。 如果不需要在应用程序中进行操作,则将无法在调试器中获取堆快照。mkd

    浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验

    引言 Memory Leak 是最难排查调试的 Bug 种类之一,因为内存泄漏是个 ...对于 JavaScript 来说,针对不同的平台,调试工具也是不一样的,最常用的恐怕还是 Chrome 自带的各种利器(针对 browser 也好,nodeJS 也好)都

    插件:检测javascript的内存泄漏

    解决JavaScript内存泄漏的方法包括: 1. 避免全局变量:全局变量会延长对象的生命周期,可能导致内存泄漏。尽量使用局部变量,并在使用完毕后将其设置为`null`。 2. 管理DOM引用:避免在JavaScript对象中长时间...

    buffer-overflow-helper:缓冲区溢出爱好者的一些帮助工具

    5. **调试助手**:在调试过程中,这些工具可能提供了方便的功能,如自动填充内存、暂停/继续执行、查看内存状态等。 6. **教育材料**:项目可能还包括教程、示例代码或解释文档,帮助初学者理解缓冲区溢出的工作...

    json 解析器 json 显示工具

    - 使用时要考虑到性能,大数据量的JSON文件可能需要更强大的工具进行处理,以防止内存溢出或运行缓慢。 总的来说,JSON显示工具是开发和调试过程中的得力助手,它能够帮助我们更高效地处理JSON数据,提高开发效率,...

    js 逆向学习笔记之阿里系cookie.docx

    7. **内存溢出问题处理**:如果在逆向过程中遇到内存溢出等问题,可以考虑优化代码结构或者分批次处理数据。 8. **方法名查询与替换**:对于一些被替换掉的方法名,可以通过浏览器开发者工具查找并记录下来;之后...

    redis web 可视化工具

    7. **最佳实践**:使用 Redis 可视化工具时,应注意合理配置资源,避免内存溢出;定期备份数据,防止数据丢失;监控性能,及时发现并解决问题。 总结,Redis Web 可视化工具是提升 Redis 管理效率的重要辅助手段,...

    CefSharp封装浏览器

    总的来说,"CefSharp封装浏览器"是一个强大的工具,它使.NET开发者能够利用Chromium的强大功能,构建具有现代Web特性的桌面应用程序。无论是为了创建一个本地化的Web应用体验,还是为了实现复杂的JavaScript交互,...

    vscode 调试 node.js的方法步骤

    尤其在处理线上混淆后的代码时,调试工具能够帮助我们解析难以理解的变量名和参数名,还原代码的真实逻辑。 总之,VS Code 提供了一种高效且直观的方式来调试 Node.js 应用程序。通过配置 `launch.json` 文件和使用...

    在C和JavaScript之间共享由相同底层缓冲区支持的结构

    使用合适的工具和框架,如Node.js的调试器和单元测试库,可以帮助确保代码的正确性。 综上所述,要在C和JavaScript之间共享由相同底层缓冲区支持的结构,需要深入了解两种语言的内存管理、数据类型转换、线程安全...

    EmbeddedWb_14.70_XE10_AV修正_Berlin可用_修正调用JS方法Bug版.rar

    Delphi Berlin是Embarcadero公司推出的Delphi IDE的一个版本,它包含了一系列的新特性和改进,如增强的Unicode支持、更好的64位编译器优化以及更强大的调试工具。对于那些使用Berlin的开发者来说,他们现在可以无缝...

    JavaScriptimagecompressorjs图片压缩工具

    10. **性能优化**:在处理大量图片或大尺寸图片时,需要注意性能优化,比如限制并发处理的数量,防止内存溢出,以及合理设置压缩参数。 了解并熟练运用这些知识点,开发者可以有效地利用`imagecompressor.js`这样的...

    v8使用简解 完整源码

    9. **源码调试**:V8提供了强大的源码级调试工具,如Chrome DevTools,可以帮助开发者定位和修复JavaScript代码中的问题。 10. **性能分析**:V8内置了性能分析工具,如`%OptimizeFunctionOnNextCall`和`%...

    SugoiOverflow:这么多sugoi - 它溢出了

    同时,熟悉调试工具也是必要的,它们可以帮助你定位并修复溢出错误。在实际应用中,了解和掌握错误处理机制,比如使用`try...catch`块,也能帮助你在遇到溢出问题时进行有效的故障排除。 总之,"SugoiOverflow"项目...

    nodejs入门(中文).

    2. 调试与测试:介绍如何进行单元测试和集成测试,以及使用debug工具定位问题。 3. 部署:讲解如何将Node.js应用部署到云平台或服务器,如Heroku、Docker等。 通过《Node.js的中文入门手册》,读者将能全面了解Node...

    elasticsearch的导入导出工具___下载.zip

    1. **Elasticsearch-dump工具介绍** `elasticsearch-dump` 是一个非常实用的第三方工具,用于在Elasticsearch实例之间导入和导出数据。它支持JSON格式,可以方便地将数据从一个索引迁移到另一个索引,或者从其他...

    java开发工具jdk1.8

    JDK1.8的JVM引入了全称为“MetaSpace”的元空间,替代了之前的PermGen(永久代),以减少内存溢出问题。 4. **Java文档生成器**:javadoc,用于自动生成API文档,便于理解和使用库函数。 5. **Java运行时环境**:...

Global site tag (gtag.js) - Google Analytics