2008-09-17 17 views
5

Çok sayıda işaretleyici içeren bir Yahoo haritanım var (~ 500). Harita, sayfayı kapatıncaya kadar (Firefox'ta) durakladığında ve "Bu komut dosyasını çalıştırmayı durdur" u ortaya çıkıncaya kadar yeterince iyi bir performans sergiliyor. iletişim kutusu (IE7'de). Yeterince uzun süre verilirse, betik işini tamamlar.Çok sayıda işaretleyici içeren bir Yahoo haritasını kapatırken takılmadan kaçının

Bu gecikmeyi azaltmak için yapabileceğim bir şey var mı?

Bu soyunmuş kod sorunu gösteriyor:

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

Ben dinamik ekleme ve işaretçileri kaldırıyorsanız olay işleyicileri ile bazı hafıza sızıntıları farkındayım, ancak bu (statik olan sorun olabilir gerçi ilgili olmak). Ben aşağıda bir öneri ardından:)

Düzenleme; Oh, ve bir harita üzerinde bu kadar çok belirteçler verileri iletmek için en iyi yol olmayabilir biliyorum , ama bu benim aradığım cevap değil

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

ve

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

ama hiçbiri :(

+0

Bu duraklatma/gecikme sırasında bir hata ayıklayıcısına (Firebug veya MS Script Debugger) ara vermeniz durumunda, hangi kod çalıştırılıyor? –

cevap

0

Sen ko çalıştı: denedim Tüm işaretleyicileri kaldırmayı veya hatta "onbeforeunload" olayını kullanarak haritayı DOM'dan kaldırmayı denemelisiniz.

+0

Öneriniz için teşekkürler - Her ikisini de denedim (soruya bakın), ama şanssız. –

0

Pencereyi kapattığınızda, haritaya erişmek için hiçbir şey denemediğinden emin misiniz?

Testin bu tip yapardım:

unload üzerinde, harita kendisi ulaşmak için bir sarıcı var ve kendini eşleme sarıcı blok erişimi vardır.

1

Javascript profilleyicisini kullanın ve hangi işlevin yavaş olduğunu görün. Daha sonra, bir çözümün nasıl yapılacağı veya en azından pahalı temizlemenin nasıl kaldırılacağı hakkında daha iyi bir fikriniz olacaktır (ve IE6'da sızmasına izin verin).