关于setTimeout内存溢出的问题.

Abin-2008 2010-08-09 12:45:29
我的代码是大概是这样:
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
...全文
909 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzncong 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
这个可能是更你请求的页面的数据量有关系...
可能你请求的数据量大,而且又是隔5秒刷新一次...
试试延长一点时间...
将$("#page_scroll").empty();
改成$("#page_scroll").html("");
[/Quote]
这句是关键
as3291363 2010-08-09
  • 打赏
  • 举报
回复
这个可能是更你请求的页面的数据量有关系...
可能你请求的数据量大,而且又是隔5秒刷新一次...
试试延长一点时间...
将$("#page_scroll").empty();
改成$("#page_scroll").html("");
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cunningboy 的回复:]

dingsontao说得没错,应该是&&关系,不是||关系
JScript code
function b(str) {
$("#page_scroll").empty(); // 清空原來获取的数据.page_scroll是一个<ul>
if (str != null && str.length > 0) {
var tabl……
[/Quote]

这个代码非常精简。
Abin-2008 2010-08-09
  • 打赏
  • 举报
回复
我现在改成了 && 可是一样还是会有内存溢出...
CunningBoy 2010-08-09
  • 打赏
  • 举报
回复
dingsontao说得没错,应该是&&关系,不是||关系
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); // 設置自動刷新.
}
}
Dleno 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 woshiguozhongbin 的回复:]

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

if(settimeout_id!=null || settimeout_id!="")这里也应该是&&

注意||和&&的区别。
你仔细想下它的逻辑。


if(settimeout_id!=null || settimeout_id!="")//settimeout_id无论是null还是空,这里都会执行的。
settimeout_id是null时,那肯定就!="",settimeout_id=""时,那它就肯定!=null
你仔细想想,别短路了。
Abin-2008 2010-08-09
  • 打赏
  • 举报
回复
我的贴发在JavaScript版面没有响应...
我的要当settimeout_id不等于null 或者不为空的情况..就是表示之前有一个setTimeout了.
才做清除.
Dleno 2010-08-09
  • 打赏
  • 举报
回复
貌似你发错了版面。
if(settimeout_id!=null || settimeout_id!="")这里也应该是&&
否则这个if始终都会执行!

window.clearTimeout(settimeout_id);//这里当然就有问题了
Abin-2008 2010-08-09
  • 打赏
  • 举报
回复
JavaScript版面的人都很忙吗???

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧