我正在做一個實時聊天應用程序與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