我的网页上有一个谷歌地图,并使用geoxml3来解析图层(有很多地标)。
有一个计时器会每隔10秒触发一次jquery来提取新的.kml文件。但是我想在解析新图层之前删除旧图层。
问题:删除/销毁的正确方法是什么?
我知道有geoXml.hideDocument();
,但只隐藏了图层,它不会删除/破坏图层吗? (下面是hideDocument()实现)
refreshMap() - 隐藏上一层并显示新图层
$.ajax({
url: url,
dataType: 'json',
type: 'get',
contentType: 'application/x-www-form-urlencoded',
data: "",
success: function (data, textStatus, jQxhr) {
if (data['success'] == 1) {
if (geoXml)
geoXml.hideDocument();
var src = data['kml'];
geoXml = new geoXML3.parser({
map: map,
suppressInfoWindows: false,
singleInfoWindow: true,
infoWindow: infowindow,
zoom : false
});
geoXml.parse(src);
geoXml.showDocument();
}
},
error: function (jqXhr, textStatus, errorThrown) {
console.log(errorThrown);
}
});
即使这样可行,但我担心的是,如果它每10秒钟一直拉数据,如果页面打开1小时,会不会导致任何延迟?原因是覆盖层实际上没有被破坏/移除,它们仍然在内存中,只是我们失去了对它的引用(因为现在引用指向新层)。
更新
我在网上找到了一些信息,似乎我不必担心这种实施。
"由于Javascript是垃圾回收,因此您无需删除 对象本身 - 当没有办法时它们将被删除 再次引用它们。"
答案 0 :(得分:0)
我有test case 这有效地做到了这一点:
filename="http://www.geocodezip.com/dynamicmarkerkml.php";
geoXml.parse(filename);
setInterval("geoXml.hideDocument();geoXml.parse(filename)", 5000);
我没有泄漏我能看到的内存,而且我已经让它运行了好几天(在某一时刻,而不是最近)。