读书人

关于setTimeout内存溢出的有关问题

发布时间: 2012-06-09 17:16:42 作者: rapoo

关于setTimeout内存溢出的问题.
我的代码是大概是这样:
var settimeout_id=null; //定器除.
var urls="system/ajax_book.php";
function a()
{
$.ajax({
type:"get",
url:urls,//全局变量,请求的页面返回数据是:2-3KB
ifModified:true, //false也不行
cache: true, //false也.
dataType:"json",
error:function(){alert("Please refresh the page or restart the browser")},
success:function(table_date){b(table_date);}
});
}

function b(str)
{
$("#page_scroll").empty(); //清空原获取的数据.page_scroll是一个<ul>
if(str!=null && str.length>0)
{
var table_str="";

//取了
table_str+="<li id='数据'>数据</li>";
$("#page_scroll").html(table_str); //添加到ul中

//这段代码就产生了IE内存溢出,如果我去除这段代码则没有.
if(settimeout_id!=null || settimeout_id!="")
{
table_str=null;
window.clearTimeout(settimeout_id); //清除settimeout函生的存消耗.
settimeout_id=null;
// 每隔 5 秒释放一次内存
if(isIE){ CollectGarbage();}
}
//就是不加上面的代码溢出的更厉害.
settimeout_id=window.setTimeout("a()",5000); //置自刷新.

}
}
最后
$(document).ready(function(){
a();
})

//我应该怎么样修改这个局部定时刷新,才不会内存溢出呢?
另外我用的内存溢出测试工具是:
http://download.csdn.net/source/1814153

[解决办法]

探讨

我的贴发在JavaScript版面没有响应...
我的要当settimeout_id不等于null 或者不为空的情况..就是表示之前有一个setTimeout了.
才做清除.

[解决办法]
dingsontao说得没错,应该是&&关系,不是||关系
JScript code
function b(str) {    $("#page_scroll").empty(); // 清空原获取的数据.page_scroll是一个<ul>    if (str != null && str.length > 0) {        var table_str = "";        // 取了        table_str += "<li id='数据'>数据</li>";        $("#page_scroll").html(table_str); // 添加到ul中        // 应该是并且的关系        if (settimeout_id != null && settimeout_id != "") {            table_str = null;            window.clearTimeout(settimeout_id); // 清除settimeout函生的存消耗.            settimeout_id = null;            // 每隔 5 秒释放一次内存            if (isIE) {                CollectGarbage();            }        }        settimeout_id = window.setTimeout("a()", 5000); // 置自刷新.    }}
[解决办法]
这个可能是更你请求的页面的数据量有关系...
可能你请求的数据量大,而且又是隔5秒刷新一次...
试试延长一点时间...
将$("#page_scroll").empty();
改成$("#page_scroll").html("");

读书人网 >JavaScript

热点推荐