关闭包含大量标记的Yahoo地图时,请避免挂起

时间:2008-09-17 10:21:00

标签: javascript maps yui yahoo-maps

我有一张带有大量标记的雅虎地图(~500)。地图执行得很好,直到我关闭页面,此时它暂停(在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);
}

但都没有奏效:(

3 个答案:

答案 0 :(得分:1)

使用Javascript探查器查看哪个功能很慢。那么你将更好地了解如何制定解决方法或至少如何删除昂贵的清理(并让它在IE6中泄漏)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

关闭窗口时,您确定没有尝试访问地图吗?

我会做这种类型的测试:

有一个包装器来到达地图本身,并且在卸载时,让包装器块访问映射本身。