我有以下问题。我将通过setMap(null)
选项删除对谷歌地图实例的所有引用,包括标记,通过以下代码:
destroyMaps = function () {
leftMap = null;
window.map = null;
geocoder = null;
for (var i=0; i<window.rightMarkers.length; i++) {
window.rightMarkers[i].setMap(null);
window.rightMarkers[i] = null;
}
window.rightMarkers = null;
$("#map-canvas-right").remove();
for (var i=0; i<window.leftMarkers.length; i++) {
window.leftMarkers[i].setMap(null);
window.leftMarkers[i] = null;
}
window.leftMarkers = null;
$("#map-canvas-left").remove();
}
我的整个代码中唯一引用leftMap
或window.map
的内容是:
window.map
var marker = new google.maps.Marker({
position: myLatlng,
map: window.map,
icon: window.pins[keyword_category.category_name],
shadow: window.pins["Shadow"],
title:job.job_title
});
marker.job_type = keyword_category.category_name;
window.rightMarkers.push(marker);
leftMap
var marker = new google.maps.Marker({
position: myLatlng,
map: leftMap,
icon: window.pins[keyword_category.category_name],
shadow: window.pins["Shadow"],
title:job.job_title
});
window.leftMarkers.push(marker);
然而,在我的分离DOM树中,在创建地图之前进行比较时/在它们被销毁之后进行比较时,仍然是谷歌地图图块:
(右键单击 - 打开图片查看完整尺寸)
我该怎么做才能找出造成DOM漏洞的原因?
答案 0 :(得分:30)
这是Google Maps API v3中的已知问题 - 即使google.maps
对象的纯粹创建和销毁(无标记创建)也会导致内存泄漏。请参阅 Issue 3803: Bug: Destroying Google Map Instance Never Frees Memory 。
他们reproduce the issue创建一个创建和销毁google.maps
对象的简单循环。参见
按下开始后,您将观察到浏览器在内存中增长,直到您按下停止。
问题尚未解决,似乎没有正式的解决方法。肯定有一种方法,但这并不是一个干净的解决方法,显然可能会停止在下一版谷歌地图中停止工作,引用the discussion:
我实际上已经设法通过手动找到半可行的修复程序 摧毁谷歌地图创造的许多元素(和 删除监听器)。但是,我使用了很多未记载的东西 这样做(我必须检查铬检查员,看看要尝试什么 删除),所以这似乎不是正确的方法。