5

我有一个带有很多标记(〜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);
}

但都没有工作:(

4

3 回答 3

1

使用 Javascript 分析器,看看哪个函数慢。然后,您将更好地了解如何制定解决方法或至少如何删除昂贵的清理(并让它在 IE6 中泄漏)。

于 2008-12-13T01:37:05.627 回答
0

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

我会做这种类型的测试:

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

于 2008-10-21T08:32:25.480 回答
0

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

于 2008-09-17T13:40:57.060 回答