Заметки о вёрстке сайтов  ·  Александр Шуркаев об HTML, CSS и JavaScript (скрипты, справочники и примеры по сайтостроению)

Утечка памяти в IE при использовании анонимных вложенных функций

29 октября 2004 г.

IE пожирает память при использовании анонимных вложенных функций. Методы борьбы.

Очень важная статья для разработчиков, пишущих на JavaScript.

В кратце: Internet Explorer 4-6 сильно пожирает память, если на странице используются анонимные вложенные функции для задания обработчиков событий. Пример:

elem.onclick = function(){
  
alert(this.innerHTML);
}

Выясняется, что два наиболее примечательных online WYSIWYG редактора — HTMLArea и FCK Editor — подвержены этому поведению в IE. Чтобы удостовериться, достаточно понажимать F5 на странице с редактором, попутно наблюдая через Task Manager увеличение потребляемой памяти программой iexplore.exe. В исходниках FCK Editor, например, много анонимных функций. Память освобождается только при закрытии браузера.

Решение: ручная сборка мусора по window.onunload, т. е. указание null обработчикам событий, заданных указанным выше способом.

Другим решением является отказ от анонимных вложенных функций:

function my_onclick(){
  alert(this.innerHTML);
}

elem.onclick = my_onclick;

Как-то так, вот.

P. S. Евгений Степанищев (aka BOLK) предлагает также в качестве лекарства следующую конструкцию:

elem.onclick = new Function('', 'alert(this.innerHTML)');

Он также указал на  IE only функцию CollectGarbage(), но, к сожалению, в данном случае она не помогает собирать мусор. Однако имейте это функцию в виду в иных случаях.

P. P. S. Программа Drip: IE Leak Detector позволяет отслеживать потери памяти в IE. Супер.

Хитовые статьи про разработку сайтов

Рассылка новостей и новых статей

Сообщения будут приходить пару раз в неделю, не чаще

Объявления

LiveInternet