5

多くのマーカー (~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);
}

しかし、どちらも機能しませんでした:(

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 に答える