I've read quite a bit about how memory leaks are created in various versions of IE. Some great information can be found here:
http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx
http://laurens.vd.oever.nl/weblog/items2005/closures/
Using closures with JQuery is a very common practice. I can't find any articles at all that speak to JQuery's event model (where closures are heavily used) with regards to IE and memory leaks In the second article posted above is a strategy to avoid memory leaks when using closures.
Does JQuery already implement a strategy similar to the one outlined in the article with regards to helping clean up potential leaks when using closures? Or is that something I must be aware of and code for?
For example,
Creates a memory leak in IE6/7:
function foo(value) { var bar = document.getElementById("selector"); bar.attachEvent("onclick", // closure function() { alert(value); // reference to 'value' from outer function scope } ); }
does the following JQuery version of the above example cause a memory leak in IE6/7?
function foo(value) { $('#selector').click( // closure function() { alert(value); // reference to 'value' from outer function scope } ); }
from jQuery 1.3 source:
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 );
}
},
as you can see, it removes all event handlers and related data before removing an element and it's subelements.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With