2008-09-17 5 views
5

Tengo un mapa de Yahoo con muchos marcadores (~ 500). El mapa funciona bastante bien hasta que cierro la página, momento en el que hace una pausa (en Firefox) y aparece un mensaje que dice "¿Deje de ejecutar este script?" diálogo (en IE7). Si se le da el tiempo suficiente, el script completa su trabajo.Evite colgar al cerrar un mapa de Yahoo con muchos marcadores

¿Hay algo que pueda hacer para reducir este retraso?

Este código simplificada presenta el problema:

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

Soy consciente de algunas pérdidas de memoria con los controladores de eventos si está dinámicamente agregar y eliminar marcadores, pero estos son estáticas (aunque el problema puede estar relacionado). Ah, y me esta cantidad de marcadores en el mapa puede no ser la mejor manera de transmitir los datos, pero esa no es la respuesta que estoy buscando;)

Editar: Siguiendo una sugerencia a continuación I' he intentado:

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

y

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

pero tampoco funcionó :(

+0

Si causa un corte con un depurador (Firebug o MS Script Debugger) durante esta pausa/retraso, ¿qué código se está ejecutando? –

Respuesta

0

Usted co uld intente eliminar todos los marcadores, o incluso eliminar el mapa del DOM utilizando el evento "onbeforeunload".

+0

Gracias por la sugerencia. Intenté ambas cosas (ver pregunta), pero sin suerte. –

0

¿Estás seguro de que nada está intentando acceder al mapa cuando cierras la ventana?

que haría este tipo de prueba:

tienen un envoltorio para alcanzar el mismo mapa, y, por descarga, tienen el acceso al bloque envoltorio para mapear en sí.

1

Utilice el generador de perfiles de Javascript y vea qué función es lenta. Entonces tendrá una mejor idea de cómo hacer una solución alternativa o al menos cómo eliminar costosas tareas de limpieza (y dejar que se filtre en IE6).

Cuestiones relacionadas