关闭带有许多标记的Yahoo地图时避免挂起

时间:2020-03-05 18:58:30  来源:igfitidea点击:

我有一张带有很多标记(约500个)的Yahoo地图。直到我关闭页面为止,地图的性能都足够好,这时它会暂停(在Firefox中)并显示"停止运行此脚本?"。对话框(在IE7中)。如果给出足够长的时间,脚本将完成其工作。

我有什么办法可以减少这种延迟?

此精简代码显示了问题:

<script type="text/javascript">
var map = new YMap(document.getElementById('map'));
map.drawZoomAndCenter("Algeria", 17);

for (var i = 0; i < 500; i += 1) {
    var geoPoint = new YGeoPoint((Math.random()-0.5)*180.0, (Math.random()-0.5)*360.0);
    var marker = new YMarker(geoPoint);
    map.addOverlay(marker);
}
</script>

如果我们动态添加和删除标记,我知道事件处理程序会发生一些内存泄漏,但这是静态的(尽管问题可能是相关的)。哦,我知道地图上的这么多标记可能不是传达数据的最佳方法,但这不是我要寻找的答案;)

编辑:按照下面的建议,我尝试了:

window.onbeforeunload = function() {
    map.removeMarkersAll();
}

window.onbeforeunload = function() {
    mapElement = document.getElementById('map');
    mapElement.parentNode.removeChild(mapElement);
}

但都没有用:(

解决方案

回答

我们可以尝试删除所有标记,甚至可以使用" onbeforeunload"事件从DOM中删除地图。

回答

关闭窗口时,我们确定没有任何内容可以尝试访问地图吗?

我会进行这种类型的测试:

有一个包装器可以到达地图本身,并且在卸载时可以使包装器块访问地图本身。

回答

使用Javascript Profiler,查看哪个功能较慢。然后,我们将有一个更好的主意,该如何解决,或者至少如何删除昂贵的清理工作(并将其泄漏到IE6中)。