项目主页上有3个实时刷新,开了2天后,内存涨到600M 项目架构:S2SH+Jquery测试性能,打开主页,Firefox占用内存为90M,开了一个周末之后,内存涨到了600M这个怎么解决啊,js好像也没有清理缓存啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 采用其他技术,如服务器的推、或是拉、dwr有comet类似帖子:http://topic.csdn.net/u/20100414/13/12ff191f-31c5-4758-81d5-066618648916.html 1. 可以考虑试试看chrome或者ie是否有相同的问题,也许只是firefox的问题2. 可以考虑观察一段时间,看看内存是否是线性增长的。3. 可以考虑关闭浏览器再打开网页 按照您说的在测试在1、关闭了FF,用IE7测试,打开时IE7占用内存为70,836K2、等跑了几个小时再观察3、这个不好吧,关闭在打开,占用内存肯定是清了 JS 內存溢出了 有時候需要手動清理JS 對象 ajax 不是有个无状态刷新吗 你可以用那个试试 用过的就是Jquey 的$.ajax()方法 还有就是 3个实时刷新的框 你是自己append上去的还是 先removed 后在append ? 如果一直都在append 会出现这问题 如果是先干掉再添加dom对象的话应该不会是这问题 实在不行就用普通的Ajax技术啊,客户端内存一直涨,那应该是JS的问题. 附上代码:setInterval("intiAreainfo()",5000);//获得区域信息function intiAreainfo() { $.ajax({type:"post", url:"areainfo_action!areainfoSum", dataType : "text", error:function () { $("#errorMsg").html("获取区域信息失败"); }, success:function (data) { if(document.getElementById("errorMsg").innerHTML=="获取区域信息失败"){ $("#errorMsg").html("");; } var AreaList = eval('('+ data +')'); clearTable(); var tbObj=document.getElementById("AreaMonitor"); for(i=0;i<AreaList.data.length;i++){ //先插入行,再插入列,再给单元格赋值。 var newRow=tbObj.insertRow(tbObj.rows.length); var new_name=newRow.insertCell(newRow.cells.length); new_name.innerHTML=AreaList.data[i].name; var new_num=newRow.insertCell(newRow.cells.length); new_num.innerHTML=AreaList.data[i].num; if(AreaList.data[i].name=="全部区域"&&AreaList.data[i].num>=ii){ ii=AreaList.data[i].num+1; document.getElementById("embedinfo").innerHTML="<embed id=\"wav\" hidden=\"true\" autostart=\"true\" src=\"alarmSound/wmpaud8.wav\" type=\"audio/wav\"></embed>"; alert("泳区人数过多,请停止售卡!!"); } } } });}//删除区域信息function clearTable(){ var tbObj=document.getElementById("AreaMonitor"); for(var i=tbObj.rows.length-1;i>0;i--){ tbObj.deleteRow(i); }}这样的循环有3个,问题是出在哪呢? js和as有一个共同的缺点就是,当运行了一段时间后,内存和CPU都会有不同程度的增加。就像你玩as写的flash游戏一样,如天书等等。目前除了关掉浏览器以外我还真的没有听说过有什么其他的方法去解决。GOOD LUCK...... 每个页面都首先加上清除函数。var timeLog;clearInterval(timeLog);timeLog = setInterval("intiAreainfo()",5000);怀疑从某个包含刷新的页面跳到其他页面又跳回来。但是,前面那个间隔刷新的并没有清除,导致刷新过多。 使用sIEve这些工具,查看你的页面是否有内存泄漏 应该是不存在这样的问题,默认的index.jsp就是一个加载一个js这个js有3个实时读取数据库的函数,在测试的时候并没有页面之间的切换 $jQueryObj.remove()和$jQueryObj.detach()不会把对象从jQuery的对象树中删除,$jQueryObj.empty()这个方法没有说会不会从对象树中删除。 SIEve 监测发现内存一直在涨,但是没有发现内存泄露的问题 确认permgen等JVM的内存分配没问题么? xheditor插件 如何判断webservice服务是否可用 从myeclipse上导出的文件放在eclipse上怎么部署 jsp页面上用C标签的值无法显示 jsp页面求相同的项目合并问题 jsp页面向action传值问题?? jdbc 连接 mysql 出现的问题 Bad handshake 大家帮帮我!! 请教高手。如何在JSP中实现multithreading(多线程) Jsp中如何添加超链接跳转至另一个页面? MongoDB分页查询返回数据类型的问题 老是连接不到数据库 WATMServer 安装中的问题处理方法
类似帖子:http://topic.csdn.net/u/20100414/13/12ff191f-31c5-4758-81d5-066618648916.html
2. 可以考虑观察一段时间,看看内存是否是线性增长的。
3. 可以考虑关闭浏览器再打开网页
1、关闭了FF,用IE7测试,打开时IE7占用内存为70,836K
2、等跑了几个小时再观察
3、这个不好吧,关闭在打开,占用内存肯定是清了
用过的就是Jquey 的$.ajax()方法
如果一直都在append 会出现这问题
如果是先干掉再添加dom对象的话应该不会是这问题
function intiAreainfo() {
$.ajax({type:"post", url:"areainfo_action!areainfoSum",
dataType : "text",
error:function () {
$("#errorMsg").html("获取区域信息失败");
}, success:function (data) {
if(document.getElementById("errorMsg").innerHTML=="获取区域信息失败"){
$("#errorMsg").html("");;
}
var AreaList = eval('('+ data +')');
clearTable();
var tbObj=document.getElementById("AreaMonitor");
for(i=0;i<AreaList.data.length;i++){
//先插入行,再插入列,再给单元格赋值。
var newRow=tbObj.insertRow(tbObj.rows.length);
var new_name=newRow.insertCell(newRow.cells.length);
new_name.innerHTML=AreaList.data[i].name;
var new_num=newRow.insertCell(newRow.cells.length);
new_num.innerHTML=AreaList.data[i].num;
if(AreaList.data[i].name=="全部区域"&&AreaList.data[i].num>=ii){
ii=AreaList.data[i].num+1;
document.getElementById("embedinfo").innerHTML="<embed id=\"wav\" hidden=\"true\" autostart=\"true\" src=\"alarmSound/wmpaud8.wav\" type=\"audio/wav\"></embed>";
alert("泳区人数过多,请停止售卡!!");
}
}
}
});
}
//删除区域信息
function clearTable(){
var tbObj=document.getElementById("AreaMonitor");
for(var i=tbObj.rows.length-1;i>0;i--){
tbObj.deleteRow(i);
}
}这样的循环有3个,问题是出在哪呢?
目前除了关掉浏览器以外我还真的没有听说过有什么其他的方法去解决。
GOOD LUCK......
clearInterval(timeLog);
timeLog = setInterval("intiAreainfo()",5000);怀疑从某个包含刷新的页面跳到其他页面又跳回来。但是,前面那个间隔刷新的并没有清除,导致刷新过多。
这个js有3个实时读取数据库的函数,在测试的时候并没有页面之间的切换
$jQueryObj.empty()这个方法没有说会不会从对象树中删除。
SIEve 监测发现内存一直在涨,但是没有发现内存泄露的问题