【发布时间】:2016-01-06 02:57:38
【问题描述】:
我必须在一个项目中使用 javascript,但我对 javascript 一无所知。 在 js 文件中,我使用 jVectorMap 显示每 5 秒“更新”一次的世界地图。当我在我的网络客户端中使用这个 javascript 文件打开网页并等待几个小时时,我的计算机内存不足。我使用 chrome 开发控制台和配置文件工具来识别产生此问题的代码部分。当我删除这部分时,没有内存使用问题。
部分代码是:
function ui_geo_map(countriesCount) {
$('#geo-world-map').empty();
$('#geo-world-map').vectorMap({
map: 'world_mill_en',
series: {
regions: [{
values: countriesCount,
scale: ['#2ecc71', '#c0392b'],
normalizeFunction: 'polynomial',
legend: {vertical: true}
}]
},
onRegionTipShow: function(e, el, code){
el.html(el.html() + ' (' + countriesCount[code] + ' - servers)');
}
});
};
function ui_geo() {
console.debug('Redrawing the geo map');
$('.pywos-geo').remove();
$.getJSON('/get/geo/all', function(data){
$.each(data, function(key, val){
countriesCount[val.country_code] = val.count;
});
ui_geo_map(countriesCount);
});
};
我知道vectorMap后面的空肯定不是正确的方法,但如果我删除$('#geo-world-map').empty();,地图不会被替换,而是显示在前一个地图下面,这不是我想要的。
有人可以帮我找到正确的方法来避免任何内存泄漏吗?
【问题讨论】:
-
您可能想使用
remove()instead ofempty(),这样$('#geo-world-map')中的节点将被删除而不是被清空。但我不太希望这能解决您的问题,因为这两个函数都不会泄漏内存。确保您拥有最新的 jquerylibrary。您可以继续删除更多代码,直到发现泄漏 -
@InsOp :感谢您的回答。如果我删除对 ui_geo() 的任何调用,或者我不允许它每 5 秒更新一次,则不存在内存使用问题。这就是为什么我认为问题出在这个函数上。
-
如果你在你的
ui_geo()-function 中也注释掉ui_geo_map(countriesCount);是这种情况吗? -
如果我只注释掉对 ui_geo_map() 的调用,则没有内存使用问题。
-
好的,尝试在
$('#geo-world-map').empty();之后立即拨打delete $('#geo-world-map').vectorMap;
标签: javascript memory-leaks jvectormap