Я искал ответы на все вопросы или даже ссылку на эту конкретную проблему безрезультатно. Я использую JQuery UI 1.8.7 и JQuery 1.5.1. У меня есть диалог, который я хочу не только уничтожить при закрытии, но и удалить из DOM по закрытию. Это отлично работает в Firefox. Однако, когда я делаю то же самое в IE7, я вижу 6MB-шип в использовании памяти для браузера, и эта память никогда не восстанавливается до тех пор, пока я полностью не выключу браузер. Поэтому моя первая мысль заключалась в том, что что-то в моем диалоге вызывает утечку памяти. Я удалил все, что добавлял, и сделал простой диалог, используя следующий код:
$('<div id="testMe">hello</div>').dialog({
modal: true,
autoOpen: true,
close: function() { $(this).dialog('destroy'); }
});
Когда я открою это диалоговое окно, закройте его и обновите браузер. Я всегда получаю больше памяти на 6 Мбайт, чем раньше. Если я открою это диалоговое окно, но затем обновить браузер до его закрытия, то я не вижу всплеска памяти вообще. Я понятия не имею, что может быть причиной этого - я нашел кучу потоков об общих утечках памяти JQuery UI, но ни один из исправлений не сделал ничего, чтобы исправить мою ситуацию.
Я также подумал, что, возможно, какой-то другой код в моем проекте мешает. Это не так. Если я делаю то же самое, используя этот пример jsFiddle, я получаю всплеск памяти! (http://jsfiddle.net/n68Af/1/). На данный момент я понятия не имею, куда еще повернуть или что еще делать. Мне нужно уничтожить эти диалоги и удалить их из DOM - в нашем (очень большом) приложении есть несколько примеров диалоговых окон, которые учитывают тот факт, что диалог Div больше не находится в DOM после закрытия.
Изменить: изменение значения модального флага не влияет. Кроме того, я понимаю, что мой пример не удаляет элемент из DOM. Я делаю это или нет, утечка памяти остается. Код в моем фактическом проекте просто удаляет элемент из dom, используя $(this).remove(). Я упростил этот пример, потому что реальная проблема - это вызов "destroy", оставляющий какую-то циклическую ссылку или что-то, что вызывает упоминание о всплеске памяти 6 МБ.
Изменить: после изучения этого больше не кажется, что я использую виджет JQuery UI (я попробовал Dialog, свой собственный виджет и Button). Пока я удаляю элемент, который виджет ссылается на DOM, я вижу огромную утечку памяти в IE7. Утечка памяти также возникает, если я перемещаю элементы в другое место в DOM. Я попробовал создать "мусорный ящик" DIV, чтобы я переместил все содержимое своего диалога, а не удалял их полностью, и произошел тот же всплеск.
Приветствуется любая помощь или направление. Спасибо заранее, ребята!