【发布时间】:2014-02-04 05:17:51
【问题描述】:
我有以下问题。我正在通过以下代码通过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 泄漏的原因?
【问题讨论】:
-
您是否有任何事件处理程序附加到地图、标记...?
-
@AntoJurković 不,根本没有。如果需要,我可以链接到我的代码,但是中间有很多不相关的代码
-
也许 GC 没有成功触发。您能否使用“收集垃圾”按钮(在底部)使用 Timeline chrome 开发工具选项卡进行另一次测试
-
@VladNikitin - 我已经尝试通过“时间轴”选项卡强制“垃圾收集”,但无济于事,暗示某处有参考。
-
jsfiddle.net/54Lf7 包含控制前端的整个代码。
标签: javascript google-maps dom google-maps-api-3 memory-leaks