Утечки памяти

Глобальная область

Глобальная область видимости всегда достижима, поэтому никогда не очищается из памяти. Соответственно, если есть необходимость хранить данные в глобальной области, о их удалении нужно заботиться самому (например через = null).

Обработчики событий

Современные браузеры автоматически очищают обработчики событий для несуществующийх DOM элементов. Поэтому, использовать removeEventListener не обязательно. Но, например в IE6, этого не происходит.

Таймеры

var someResource = getData();
setInterval(function() {
    var node = document.getElementById('Node');
    if(node) {
        // Do stuff with node and someResource.
        node.innerHTML = JSON.stringify(someResource));
    }
}, 1000);

В какой то момент, элемент node может стать недоступным, но обработчик всё ещё есть и всё ещё ссылается на someResource.

DOM

Если вы сохраняете ссылки на DOM элементы, например с помощью getElementById, не забывайте их очищать если элемента больше нет. Пример:

var elements = {
    button: document.getElementById('button')
};
function removeButton() {
    document.body.removeChild(document.getElementById('button'));
    // В этой точне, у нас всё ещё есть ссылка на кнопку из глобального elements.
    // Другими словами, кнопка не будет удалена из памяти.
}

Если бы кнопка находилась в отдельном большом блоке, который в последствии удаляется, в памти остался бы весь этот блок, т.к. ссылка на его элемент всё ещё существует.

Ссылки

results matching ""

    No results matching ""