javascript 重复执行函数,内存溢出

jyc999 2016-07-11 11:16:59

function getDeviceCatalogo() {
var json = {"苏州":{"用户1":{"device_ID":["101","102"],"name":["设备1","设备2"],"state":["正常","离线"]},"用户2":{"device_ID":["104","105","106","107"],"name":["设备1","设备2","设备3","设备4"],"state":["离线","正常","故障","离线"]}},"无锡":{"用户3":{"device_ID":["201","202","203"],"name":["设备1","设备2","设备3"],"state":["故障","正常","故障"]},"用户4":{"device_ID":["204","205","206","207"],"name":["设备1","设备2","设备3","设备4"],"state":["正常","故障","故障","正常"]}}};
var device_catalog_html = '';
for (var prop1 in json) {
device_catalog_html += '<div class="list"><div><i class="fa fa-angle-down fa-fw fa-lg"></i>' + prop1 + '</div>';
for (var prop2 in json[prop1]) {
device_catalog_html += '<div class="list1"><div><i class="fa fa-angle-down fa-fw fa-lg"></i>' + prop2 + '</div><div class="device_list">';
for (var i in json[prop1][prop2].name) {
var class_name, prepend_i;
switch (json[prop1][prop2].state[i]) {
case '正常':
class_name = 'normal';
prepend_i = '<i class="fa fa-fw fa-modx fa-spin"></i>';
break;
case '故障':
class_name = 'wrong';
prepend_i = '<i class="fa fa-fw fa-scale fa-flash"></i>';
break;
case '离线':
class_name = 'off';
prepend_i = '<i class="fa fa-fw fa-power-off"></i>';
break;
}
device_catalog_html += '<div device_ID="' + json[prop1][prop2].device_ID[i] + '"device_name="' + json[prop1][prop2].name[i] + '" state="' + json[prop1][prop2].state[i] + '" class="' + class_name + '">' + prepend_i + json[prop1][prop2].name[i] + '</div>';
}
device_catalog_html += '</div></div>'
}
device_catalog_html += '</div>';
}
for (var i = 0; i < $('#device>.body>.device_catalog').children().length; i++) {
var target = $('#device>.body>.device_catalog').get(0);
var e = target.childNodes[i];
delete target.removeChild(e);
e = null;
delete e;
}
$('#device>.body>.device_catalog').html(device_catalog_html);
}

setInterval(getDeviceCatalogo, 2000);

以上的代码在浏览器执行的时候,会让内存不断增长,最终会吃光内存,请老司机帮忙看一下,哪个地方的问题。。。
...全文
229 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jio可 2016-07-11
  • 打赏
  • 举报
回复
引用 2 楼 jyc999 的回复:
引用 1楼三岁打酱油 的回复:
每两秒更新一下页面重新获取数据生成页面,应该是没问题的也不会造成内存被耗光建议每五秒刷新一次,最下面的循环是干嘛的,每次重新生成页面为什么还要去移除子节点?
之前是以为,即使改变一个div内部的html,旧的子节点在内存中依然存在,所以后来加了一段测试一下,结果没有鸟用
$('#device>.body>.device_catalog').html(‘’); 把这个加在方法的最上面就可以了
jyc999 2016-07-11
  • 打赏
  • 举报
回复
引用 1楼三岁打酱油 的回复:
每两秒更新一下页面重新获取数据生成页面,应该是没问题的也不会造成内存被耗光建议每五秒刷新一次,最下面的循环是干嘛的,每次重新生成页面为什么还要去移除子节点?
之前是以为,即使改变一个div内部的html,旧的子节点在内存中依然存在,所以后来加了一段测试一下,结果没有鸟用
jio可 2016-07-11
  • 打赏
  • 举报
回复
每两秒更新一下页面重新获取数据生成页面,应该是没问题的也不会造成内存被耗光建议每五秒刷新一次,最下面的循环是干嘛的,每次重新生成页面为什么还要去移除子节点?
jyc999 2016-07-11
  • 打赏
  • 举报
回复
引用 3楼三岁打酱油 的回复:
引用 2 楼 jyc999 的回复:
[quote=引用 1楼三岁打酱油 的回复:]每两秒更新一下页面重新获取数据生成页面,应该是没问题的也不会造成内存被耗光建议每五秒刷新一次,最下面的循环是干嘛的,每次重新生成页面为什么还要去移除子节点?
之前是以为,即使改变一个div内部的html,旧的子节点在内存中依然存在,所以后来加了一段测试一下,结果没有鸟用
$('#device>.body>.device_catalog').html(‘’); 把这个加在方法的最上面就可以了[/quote]你这个办法似乎有点效果,现在内存在增加,不过过段时间就回落了,然后继续增加,幅度不算特别大,难道每次更新元素的html之前还要先清空再更新。现在还要看看稳定性如何,到下班再看看内存是否暴涨。
NANU-NANA 2016-07-11
  • 打赏
  • 举报
回复
给json加上id属性 或者改用for(var i = 0; i < json.length; i++)

87,910

社区成员

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

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