2008-09-17 9 views
5

Ich habe eine Yahoo-Karte mit vielen Markern (~ 500). Die Karte funktioniert gut genug, bis ich die Seite schließe, an dieser Stelle pausiert sie (in Firefox) und bringt ein "Stop running this script?" Dialog (in IE7). Wenn es lange genug gegeben wird, vervollständigt das Skript seine Arbeit.Vermeiden Sie, wenn Sie eine Yahoo-Karte mit vielen Markern schließen

Gibt es etwas, was ich tun kann, um diese Verzögerung zu reduzieren?

Diese abgespeckte Code zeigt das Problem:

<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> 

Ich bin von einigen Speicherlecks mit den Event-Handler bewusst, wenn Sie dynamisch Hinzufügen und Entfernen von Markierungen sind, aber diese statisch sind (obwohl das Problem kann verwandt sein). Oh, und ich weiß diese viele Markierungen auf der Karte nicht der beste Weg sein können, um die Daten zu übermitteln, aber das ist nicht die Antwort, ich suche;)

Edit: Nach einem Vorschlag unten I‘ habe versucht:

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

und

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

aber weder arbeitete :(

+0

Wenn Sie während dieser Pause/Verzögerung eine Unterbrechung mit einem Debugger (entweder Firebug oder MS Script Debugger) verursachen, welcher Code wird ausgeführt? –

Antwort

0

Sie co Versuchen Sie, alle Markierungen zu entfernen oder entfernen Sie die Karte mit dem Ereignis "onbeforeunload" aus dem DOM.

+0

Danke für den Vorschlag - ich habe beides versucht (siehe Frage), aber ohne Glück. –

0

Sind Sie sicher, dass nichts versucht, auf die Karte zuzugreifen, wenn Sie das Fenster schließen?

ich diese Art von Test tun würde:

haben einen Wrapper die Karte selbst, und zum Entladen zu erreichen, haben die Wrapper-Zugriff auf Blockebene selbst abzubilden.

1

Verwenden Sie Javascript Profiler und sehen Sie, welche Funktion langsam ist. Dann haben Sie eine bessere Idee, wie Sie einen Workaround machen oder zumindest teures Cleanup entfernen (und es in IE6 austreten lassen).