我正在做一个实时聊天应用程序与Web界面,我得到了FF5(Linux二进制)不断增长的内存足迹。奇怪的是,铬没有表现出膨胀。我在做什么是以下几点:AJAX内存泄漏/膨胀
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功能。也许我正在创建一个封闭,并没有被正确收集?如果是这样,我该如何避免它?
在此先感谢, 维克。
更新:我更改了封闭专门摆脱xmlhttp对象后,它已被使用,以什么似乎是好的结果现在闭合看起来像这样:xmlhttp.onreadystatechange = \t \t \t \t函数() \t \t \t \t { \t \t \t \t \t如果(xmlhttp.readyState == 4 && xmlhttp.status == 200) \t \t \t \t \t { \t \t \t \t \t \t ajax_handler(XMLHTTP); \t \t \t \t \t \t xmlhttp = null; \t \t \t \t \t} \t \t \t \t}; – vivri