Одним из быстрых и грязных решений было бы менее частое обращение к серверу:
var requestCounter = 0;
var frequency = 50;
google.maps.event.addListener(map, 'bounds_changed', function() {
if((++requestCounter % frequency) == 0){
// here goes an ajax call (also, optionally reset the counter here)
}
});
В качестве альтернативы, я сделал что-то подобное, где я сбрасывал таймер каждый раз, когда «слышал» от пользователя. Когда таймер истек, он вызвал мое действие. Таким образом, таймер постоянно пытается отключиться, но если пользователь что-то делает, таймер сбрасывается. В конце концов, пользователь перестает двигаться достаточно долго, чтобы таймер мог вызвать событие.
EDIT:
По линиям:
google.maps.event.addListener(map, 'bounds_changed', userInput);
function userInput() {
resetTimer();
}
Где resetTimer () очищает / запускает ваш таймер. Это будет выглядеть примерно так:
var inputTimer = null;
var timeLimit = 500;
function resetTimer() {
if(inputTimer != null) clearInterval(inputTimer);
inputTimer = setTimeout('contactServer()', timeLimit);
}
function contactServer() {
// here goes an ajax call
}
Я не проверял, что это компилируется, но он должен дать вам основную идею. Этот код имеет то преимущество, что он достаточно модульный, чтобы работать на многих других языках с незначительными правками. Я придерживаюсь аналогичной логики в ActionScript. Кроме того, его чрезвычайно легко читать, логически следовать и поддерживать (через 6 месяцев, когда вы забудете, как работает ваш код).
Я надеюсь, что это поможет,
- gMale