我正在使用Web界面进行实时聊天应用程序,并且我在FF5(Linux二进制文件)中获得了不断增长的内存占用。奇怪的是,Chromium没有表现出膨胀。我正在做的是以下内容:
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函数。也许我正在创建一个闭包,它没有被正确收集?如果是这样,我该如何避免呢?
提前致谢, 维克。
答案 0 :(得分:1)
我见过与FF类似的东西 - 通常极端的记忆膨胀来自像萤火虫这样的插件;但是,我总是建议手动取消JS中的对象以强制清除内存。使用JS的内存管理通常很差,最好在自己之后进行清理。手动:(