jQuery очень осторожен с утечками памяти, например:
(я показываю фрагменты кода из 1.3.2, я ожидаю, что более поздние версии будут столь же осторожны)
Когда вы устанавливаете innerHTML узла в''
при использовании .html('')
происходят следующие вещи
/**** jQuery's html method ****/
html: function( value ) {
return value === undefined ?
(this[0] ?
this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
null) :
/**** This bit will call empty on the node ****/
this.empty().append( value );
},
/**** jQuery's empty method ****/
empty: function() {
/**** this bit removes all dom nodes that are children ****/
// Remove element nodes and prevent memory leaks
jQuery(this).children().remove();
/**** this bit just gets rid of text nodes ****/
// Remove any remaining nodes
while ( this.firstChild )
this.removeChild( this.firstChild );
}
/**** jQuery's remove method ****/
remove: function( selector ) {
if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
// Prevent memory leaks
jQuery( "*", this ).add([this]).each(function(){
/**** This is the important bit, all events and all data ****/
/**** including references to other objects and nodes are removed ****/
/**** Sweet! ****/
jQuery.event.remove(this);
jQuery.removeData(this);
});
if (this.parentNode)
this.parentNode.removeChild( this );
}
},
Я вполне уверен, что jQuery справится с задачей предотвращения утечек памяти.Конечно, если вы сделаете что-то вроде удаления контента с помощью innerHTML
, вы потеряете это преимущество.Это не значит, что вы не должны этого делать, это более эффективно, но вам либо не нужно заботиться о возможных утечках, либо быть уверенным в том, что к дочерним узлам не прикреплены события или данные.