2008-09-17 8 views
5

У меня есть карта Yahoo с большим количеством маркеров (~ 500). Карта работает достаточно хорошо, пока я не закрою страницу, после чего она приостанавливается (в Firefox) и вызывает «Прекратить запуск этого скрипта»? диалога (в IE7). Если дано достаточно долго, скрипт завершает свою работу.Избегайте повесить при закрытии карты Yahoo с большим количеством маркеров

Есть ли что-нибудь, что я могу сделать, чтобы уменьшить эту задержку?

Это урезанная код демонстрирует проблему:

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

Я знаю некоторых утечек памяти с использованием обработчиков событий, если вы динамически добавляя и удаляя маркеры, но они статичны (хотя проблема может связаны). О, и я знаю это много маркеров на карте не может быть лучшим способом для передачи данных, но это не тот ответ, я ищу;)

Edit: По предложению ниже я пробовал:

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

и

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

но ни работал :(

+0

Если вы вызываете разрыв с отладчиком (Firebug или MS Script Debugger) во время этой паузы/задержки, какой код выполняется? – 2008-10-21 03:58:48

ответ

0

Вы сотрудничество uld попробуйте удалить все маркеры или даже удалить карту из DOM с помощью события onbeforeunload.

+0

Спасибо за предложение - я попробовал оба из них (см. Вопрос), но не повезло. – 2008-09-19 14:44:18

0

Вы уверены, что это не попытка получить доступ к карте при закрытии окна?

Я хотел бы сделать этот тип теста:

имеет обертку, чтобы достичь самых карт, а также, на разгрузке, иметь доступ к обертке блока для отображения себя.

1

Используйте профайлер Javascript и посмотрите, какая функция работает медленно. Тогда вам будет лучше понять, как сделать обходной путь или, по крайней мере, как удалить дорогостоящую очистку (и позволить ей протекать в IE6).