Я читал довольно много о том, как утечки памяти создаются в различных версиях IE. Некоторой большая информации можно найти здесь:О jquery, замыканиях и возможных утечках памяти
http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx
http://laurens.vd.oever.nl/weblog/items2005/closures/
Использования затворов с JQuery является очень распространенной практикой. Я не могу найти статей вообще, которые говорят с моделью событий JQuery (где закрытие сильно используется) в отношении IE и утечек памяти. Во второй статье, опубликованной выше, есть стратегия, позволяющая избежать утечек памяти при использовании закрытий.
Содержит ли 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 } ); }
В вызове метода .remove() ничего нет. –
Известная проблема с утечкой в IE возникает, когда вы удаляете объект DOM с обработчиками событий, который может быть закрытием, содержащим ссылку на этот же объект DOM. Решение состоит в том, чтобы удалить все обработчики событий из объекта DOM, прежде чем удалять его из дерева DOM. Этот метод jQuery's .remove() делает именно это. – Javier