Знаете ли вы, что может вызвать утечки памяти в JavaScript? - PullRequest
23 голосов
/ 04 октября 2008

Знаете ли вы, что может вызвать утечки памяти в JavaScript? Меня интересуют браузеры: IE 7, FireFox 3, Safari 3

Ответы [ 5 ]

33 голосов
/ 04 октября 2008

Есть хорошая статья о JavaScript и утечках памяти . В нем не говорится конкретно о браузере, скорее, он описывает всю проблему утечек памяти и JavaScript.

Я думаю, что лучше разрабатывать веб-сайт для широкой публики как можно более неопределенным для браузера, если это возможно для оптимизации для нескольких браузеров.

22 голосов
/ 04 октября 2008

Вот классическая утечка памяти в IE: -

function body_onload()
{
    var elem = document.getElementById('someElementId');
    // do stuff with elem
    elem.onclick = function() {
        //Some code that doesn't need the elem variable
    }
 }

После выполнения этого кода существует циклическая ссылка, потому что элемент имеет функцию, которой назначено событие onclick, которое ссылается на объект области действия, который в свою очередь содержит ссылку на элемент.

someElement-> onclick-> функция-scope-> elem-> someElement

В IE DOM элементы - это объекты подсчета ссылок на основе COM, которые Javascript GC не может очистить.

Добавление последней строки в приведенном выше коде очистит ее: -

var elem = null;
3 голосов
/ 04 октября 2008

в общем; Циркулярные ссылки являются причиной многих проблем. Я помню, что IE 6 (не уверен, относится ли он к 7) протекает довольно плохо с XMLHTTP ... установка onreadystatechange = null, как только он был закончен с исправленным.

2 голосов
/ 04 октября 2008

Вы имеете дело с 2 видами объектов (и 2 сборщиками мусора), объектами javascript и DOM, которые могут ссылаться друг на друга (циклическая ссылка), и тогда ни один GC не сможет позаботиться обо всех своих объектах, даже если страница разгружается. Вот хорошее описание:

http://getben.com/archive/2006/05/30/Resolving-JavaScript-Memory-Leaks.aspx

http://www.josh -davis.org / 2007/04/11 / JavaScript-встроенный-слушатели-и-память-утечка /

1 голос
/ 04 октября 2008

Вы можете проверить эту статью MSDN на наличие шаблонов утечки памяти Internet Explorer. Также есть несколько инструментов для обнаружения утечек памяти:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...