Я работаю в чате в режиме реального времени с веб-интерфейсом, и у меня постоянно растет объем памяти в 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.Может быть, я создаю закрытие, и оно не собирается должным образом?Если так, как я могу избежать этого?
Заранее спасибо, Вик.