Устраняем утечки памяти в JavaScript IE6
9 июня 2008
Хэджер Вэнг искал способы устранения утечек памяти в IE6 и нашёл относительно новый способ, рассмотренный в китайском блоге.
/** * Используем try ... finally для предотвращения утечки памяти */ function createButton() { var obj = document.createElement("button"); obj.innerHTML = "click me"; obj.onclick = function() { //handle onclick } obj.onmouseover = function() { //handle onmouseover } //вот оно самое :) try { return obj; } finally { obj = null; } }
Комментарии RSS по email OK
Странно, почему obj не уничтожается после завершения функции
Видимо, чтобы нормально работать с кнопкой.
Особо приколола ссылка на китайский блог:)))
Было бы более актуально почитать подобное про IE7. Где такое есть?
В седьмом утечек почти нет. Можно проверить:
JavaScript Memory Leak Detector
Нет тут не каких утечек просто в IE объект удаляется после вставки на страницу это удаление реализовано в фунции appendChild а так как вставки не было то объект и весит в памяти Автор этого поста просто мудак
После вызова appendChild эта херня вобще не нужна
//вот оно самое :) try { return obj; } finally { obj = null; }
Да развелось говно кодеров
Сами вы мудаки. Красивое решение.
Смысл в том что ссылка на obj сохраняется в контексте функций навешанных
на obj.onclick и obj.onmouseover. Это называется замыканием.
Для того что обнулить ссылку на объект, требуется обязательно в конце функции createButton сделать obj = null.
Но сделать мы этого не можем потому как нам этот obj надо вернуть из самой функции.
Вот для этого то и делается сея конструкция try.
Давеча пришлось заниматься проблемой утечек памяти. Но проект большой, за всеми телодвижениями не уследишь. Поэтому искал детекторы ликов. Ссылка из #5 комментария - нерабочая. Автор что-нибудь посоветует по этому поводу?
Советую застрелится