Eri*_*rik 5 jquery internet-explorer memory-leaks
我已经阅读了很多关于如何在各种版本的IE中创建内存泄漏的内容.一些很棒的信息可以在这里找到:
http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx
http://laurens.vd.oever.nl/weblog/items2005/closures/
使用JQuery的闭包是一种非常常见的做法.关于IE和内存泄漏,我找不到任何与JQuery的事件模型(大量使用关闭)有关的文章.上面发布的第二篇文章是一种在使用闭包时避免内存泄漏的策略.
JQuery是否已经实施了类似于文章中概述的策略,以帮助清理使用闭包时潜在的泄漏?或者是我必须注意和代码的东西?
例如,
在IE6/7中创建内存泄漏:
function foo(value) { var bar = document.getElementById("selector"); bar.attachEvent("onclick", // closure function() { alert(value); // reference to 'value' from outer function scope } ); }
以上示例的以下JQuery版本是否会导致IE6/7中的内存泄漏?
function foo(value) { $('#selector').click( // closure function() { alert(value); // reference to 'value' from outer function scope } ); }
来自 jQuery 1.3 源代码:
remove: function( selector ) {
if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
// Prevent memory leaks
jQuery( "*", this ).add([this]).each(function(){
jQuery.event.remove(this);
jQuery.removeData(this);
});
if (this.parentNode)
this.parentNode.removeChild( this );
}
},
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它在删除元素及其子元素之前删除所有事件处理程序和相关数据。