我在一张地图上有 4 种不同类型的标记。目前幻灯片在每种类型中旋转,隐藏其他 3 个。每种不同类型的标记都有一个 MarkerClusterer 对象,因此它们不会聚集在一起。
我遇到的问题是 chrome 中的堆快照显示我每 5 分钟左右将使用的内存量增加约 2mb。这是我目前的代码:
function transitionMarkers() {
if (isSlideShowActive) {
for (var i = 0; i < markers.length; i++) {
if (nutrientsArray[slideShowCounter] === markers[i].address.SOURCE_GROUP) {
markers[i].setVisible(true);
} else {
markers[i].setVisible(false);
}
}
for (var n in types.NUTRIENTS) {
for (var sc in types.SOURCE_CODES) {
if (nutrientsArray[slideShowCounter] === n) {
markerClusters[n][sc].setMap(map);
} else {
markerClusters[n][sc].setMap(null);
}
}
}
}
incrementSlideShowCounter();
}
标记有能力改变它们的可见性,因为它们会在一分钟内重新渲染,所以我不会费心在它们上使用 setMap(null)。但是,标记集群没有此选项。当我检查堆快照时,我看到了成千上万个如下所示的对象:
[1076] :: pf @2451465 5 360 % 2 3360 %
b :: gi @2273271 2 120 % 170 5441 %
e :: function() @2454527 6 360 % 2 3000 %
proto :: pf @2338839 5 120 % 360 %
d :: "bounds_changed" @67519
看起来有数以千计的这些 bounds_changed 事件正在累积......我的地图只隐藏或显示标记,它不会四处移动、放大或缩小或类似的东西。
有什么想法吗?