-
-
JavaScript内存泄漏
-
发表于: 2013-8-27 23:04 782
-
1。什么是内存泄漏,
内存泄漏是指无法重新分配,即使它不被使用的应用程序,这是分配的内存。通常情况下,垃圾收集器收集的DOM元素和事件处理程序时,他们没有引用或无法访问。但是,内存泄漏是无情的早期版本的IE浏览器,IE 7和之前,因为内存管理不理解的JavaScript周期循环被打破,直到明确可以通过分配给空并不会回收内存。
2。为什么你需要知道?
内存泄漏是一种常见的意外的编程错误,在大型Web应用程序。内存泄漏减少一个web应用程序的性能,直到它变得无法使用时浪费内存的增长超出系统可以承受。作为一名Web开发人员,开发一个web应用程序,以满足功能要求是一个web应用程序的成功只是第一步,性能要求是一样重要的,更何况可能失败的应用程序或浏览器崩溃。
3。JavaScript中的内存泄漏的主要原因是什么?
1)循环引用
一个简单的例子是被称为一个JavaScript对象,在相同的时间相同或另一个JavaScript对象是指一个DOM对象,DOM对象可能导致内存泄漏。不会由垃圾收集器收集的DOM对象的引用,即使脚本停止。这种模式通常发生在一个对象引用链,它是防不胜防。喙循环引用的对象,无论是需要被指定为空引用的DOM对象的DOM对象或参考。
2)JavaScript的封闭,
因为JavaScript的范围限制,实现了很多依靠上的JavaScript封闭。请看看我以前的博客后的JavaScript的范围和封闭,如果你想知道更多关于关闭。
封闭可能会导致内存泄漏,因为内部函数保存了一个引用外部函数的变量,所以内部函数可以继续访问私有即使在函数返回的外部函数中定义的变量。它为JavaScript程序员断开所有事件处理程序页面之前卸载是最好的做法。
3)DOM插入顺序
的临时对象被创建时,两个连接在一起的不同范围的DOM对象。当DOM对象的范围改变文件,临时对象被困住了。随着中说,DOM对象应附着在该命令从当前现有的DOM元素在网页顶部的其余部分的DOM对象,所以它们会一直共享文档的范围,并没有临时对象被创建。
4。如何检测
内存泄漏是通常难以检测显影剂的,因为它们是一些无意的错误所造成的大量的代码内,并且它不影响应用程序的功能,直到存储器饥饿在系统中发生。这就是为什么在长期测试期间收集的性能测试时,应用程序的性能指标。
最简单的方法来检测内存泄漏检查内存使用任务管理器。铬在一个单独的选项卡中打开应用程序和检查的内存使用情况,如果随着时间的推移不断。还有其他的调试工具提供内存监控功能,如Chrome开发人员工具。这里是一个在谷歌开发者教程堆纹功能。
参考文献:
1。http://javascript.crockford.com/memory/leak.html
2。http://msdn.microsoft.com/en-us/library/Bb250448
3。http://www.ibm.com/developerworks/web/library/wa-memleak/
内存泄漏是指无法重新分配,即使它不被使用的应用程序,这是分配的内存。通常情况下,垃圾收集器收集的DOM元素和事件处理程序时,他们没有引用或无法访问。但是,内存泄漏是无情的早期版本的IE浏览器,IE 7和之前,因为内存管理不理解的JavaScript周期循环被打破,直到明确可以通过分配给空并不会回收内存。
2。为什么你需要知道?
内存泄漏是一种常见的意外的编程错误,在大型Web应用程序。内存泄漏减少一个web应用程序的性能,直到它变得无法使用时浪费内存的增长超出系统可以承受。作为一名Web开发人员,开发一个web应用程序,以满足功能要求是一个web应用程序的成功只是第一步,性能要求是一样重要的,更何况可能失败的应用程序或浏览器崩溃。
3。JavaScript中的内存泄漏的主要原因是什么?
1)循环引用
一个简单的例子是被称为一个JavaScript对象,在相同的时间相同或另一个JavaScript对象是指一个DOM对象,DOM对象可能导致内存泄漏。不会由垃圾收集器收集的DOM对象的引用,即使脚本停止。这种模式通常发生在一个对象引用链,它是防不胜防。喙循环引用的对象,无论是需要被指定为空引用的DOM对象的DOM对象或参考。
2)JavaScript的封闭,
因为JavaScript的范围限制,实现了很多依靠上的JavaScript封闭。请看看我以前的博客后的JavaScript的范围和封闭,如果你想知道更多关于关闭。
封闭可能会导致内存泄漏,因为内部函数保存了一个引用外部函数的变量,所以内部函数可以继续访问私有即使在函数返回的外部函数中定义的变量。它为JavaScript程序员断开所有事件处理程序页面之前卸载是最好的做法。
3)DOM插入顺序
的临时对象被创建时,两个连接在一起的不同范围的DOM对象。当DOM对象的范围改变文件,临时对象被困住了。随着中说,DOM对象应附着在该命令从当前现有的DOM元素在网页顶部的其余部分的DOM对象,所以它们会一直共享文档的范围,并没有临时对象被创建。
4。如何检测
内存泄漏是通常难以检测显影剂的,因为它们是一些无意的错误所造成的大量的代码内,并且它不影响应用程序的功能,直到存储器饥饿在系统中发生。这就是为什么在长期测试期间收集的性能测试时,应用程序的性能指标。
最简单的方法来检测内存泄漏检查内存使用任务管理器。铬在一个单独的选项卡中打开应用程序和检查的内存使用情况,如果随着时间的推移不断。还有其他的调试工具提供内存监控功能,如Chrome开发人员工具。这里是一个在谷歌开发者教程堆纹功能。
参考文献:
1。http://javascript.crockford.com/memory/leak.html
2。http://msdn.microsoft.com/en-us/library/Bb250448
3。http://www.ibm.com/developerworks/web/library/wa-memleak/
赞赏
看原图
赞赏
雪币:
留言: