Прежде всего, событие bounds_changed срабатывает непрерывно, когда пользователь панорамирует карту. Вы должны сделать что-то подобное в обработчике событий:
if(reloadTimer){
clearTimeout(reloadTimer);
}
reloadTimer = setTimeout(function(){
// fetch new data
}, 400);
Во-вторых, если вы можете минимизировать количество запросов, кэшируя некоторые данные на клиенте, пользовательский интерфейс, вероятно, будет гораздо более отзывчивым. Вы можете кэшировать довольно большое количество маркеров на клиенте и при этом поддерживать отличную производительность. Помните, что маркеры должны быть удалены с карты, если они находятся за пределами видимых границ, так как это ухудшит производительность.
Вы можете кэшировать данные на клиенте несколькими способами, в основном в зависимости от ваших пользователей и того, как они используют ваше приложение. Самый быстрый способ реализовать кэширование - это передать все данные с сервера за один запрос и создать структуру данных в javascript, с которой карта получит маркеры. Эта структура данных будет существовать в области видимости страницы и ускорить операции с картой. Ответ сервера также может кэшироваться в браузере, если вы можете позволить себе устанавливать заголовки срока действия на определенное время.
Если ваши пользователи вернутся к вашему приложению, вы можете сохранить структуру данных в localStorage или sessionStorage, используя HTML5. Возможно, вы могли бы регулярно обновлять данные, когда пользователь бездействует на вашей странице.
Подробнее о местном магазине: http://diveintohtml5.info/storage.html
PS! Вам также следует следовать советам skarE по использованию события ожидания вместо bounds_changed.
PPS! Когда дело доходит до отображения маркеров на карте, MarkerManager - хорошая идея. Я также рекомендую MarkerClusterer (http://google -maps-utility-library-v3.googlecode.com / svn / trunk / markerclusterer / docs / reference.html ), если вы хотите объединить маркеры в областях с высоким маркером плотность в группы кластеров.