AJAX утечка памяти / раздувание - PullRequest
1 голос
/ 19 августа 2011

Я работаю в чате в режиме реального времени с веб-интерфейсом, и у меня постоянно растет объем памяти в FF5 (бинарный файл Linux).Любопытно, что Хром не показывает вздутие живота.Я делаю следующее:

1) Функция запускает цикл:

function init_chat ()
        {
            doAjax ("my-url", handler_name);
        }

2) Функция doAjax:

function doAjax(address, ajax_handler)
        {   
            var xmlhttp;

            if (window.XMLHttpRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else
            {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            } 

            xmlhttp.onreadystatechange = function() {ajax_handler(xmlhttp);};

            xmlhttp.open("GET", address, true);
            xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xmlhttp.send();
        }

3На сервере поток запросов ожидает не более 3 секунд для получения новой информации и возвращает ответ JSON

4) Функция-обработчик обрабатывает ответ и снова вызывает doAjax, при этом сама выступает в качестве функции-обработчика.

Насколько я понимаю, это не настоящая рекурсия, поскольку вызов ajax должен порождать новый поток, а функция-обработчик теоретически не должна удерживать указатель перехода назад к функции doAjax.Может быть, я создаю закрытие, и оно не собирается должным образом?Если так, как я могу избежать этого?

Заранее спасибо, Вик.

1 Ответ

1 голос
/ 06 мая 2012

Я видел подобные вещи с FF - обычно экстремальное увеличение памяти происходит от плагинов, таких как firebug;однако я всегда рекомендую вручную обнулять объекты в JS, чтобы принудительно очистить память.Управление памятью с помощью JS, как правило, оставляет желать лучшего, поэтому рекомендуется убирать за собой вручную: (

...