2010-05-27 2 views
14

У меня есть функция JavaScript, которая фактически завершает вызов на стороне сервера. Я хочу ограничить скорость, с которой эта функция может быть вызвана.Как я могу оценить предел, насколько быстро функция javascript позволяет себе называться?

Что я могу ограничить, насколько быстро моя функция javascript будет вызвана, скажем, 200-500 миллисекунд или около того? Должен ли я использовать контроль таймера javascript?

ответ

2

Вы можете создать флаг, который поднят при вызове функции и запустить таймер, и если этот флаг поднят, то вы не можете вызвать функцию, затем через определенное время вызывается таймер, и он отключает флаг, позволяющий снова вызвать функцию.

Флаг может быть любым, как bool или чем-то еще.

-2

попытка setinterval («функция()», 500)

+0

Это вызывает функцию каждые 500мс, но от моего понимания Hendo Безразлично Не нужно вызывать функцию каждые 500 мс.Просто возможность сделать это. – hora

+0

Я неправильно понял, мой плохой – Jose

2

Это не позволит функция работать, если прошло менее 500 миллисекунд с момента последнего вызова.

(function(window, undefined){ 
    var canCall = true; 
    window.funcName = function(){ 
     if (!canCall) 
      return; 
     //Your function 
     canCall = false; 
     setTimeout(function(){ 
      canCall = true; 
     }, 500); 
    } 
})(window); 
0
fooCanBeCalled = true; 
function foo(){ 
    if(!fooCanBeCalled) return; 
    //Whatever you want to do 
    fooCanBeCalled = false; 
    setTimeout(function(){ 
     { 
     fooCanBecalled = true; 
     } 
    , delayInMilliseconds); 
} 
+0

Он отправил его позже, и его код выдает глобальную переменную и по-прежнему получает +1? -____- – 2010-05-27 20:27:23

5

Прежде всего, необходимо установить, если вы хотите ограничить скорость в том, что вы игнорировать все вызовы функций, которые сделаны во время период, когда вы ожидаете, или хотите просто запросить очереди в очереди, чтобы вы не делали больше X запросов в секунду.

Если вы хотите, чтобы прежнее решение (игнорировать новые функциональные вызовы), то вы должны смотреть на http://documentcloud.github.com/underscore/#throttle

Если вы хотите ограничить скорость, так что вы никогда не называйте вашу функцию более чем X раз в секунду, но дон» t полностью потерять эти вызовы функций, тогда вам нужно совершенно другое решение.

Я написал расширение подчеркивания в https://gist.github.com/1084831 Вы можете увидеть рабочий пример на http://jsbin.com/upadif/8/edit#preview

-1

Вы можете использовать функцию дребезга

function debounce(func, wait, immediate) { 
    var timeout; 
    return function() { 
     var context = this, 
      args = arguments; 
     var later = function() { 
      timeout = null; 
      if (!immediate) func.apply(context, args); 
     }; 
     var callNow = immediate && !timeout; 
     clearTimeout(timeout); 
     timeout = setTimeout(later, wait); 
     if (callNow) func.apply(context, args); 
    }; 
}; 

var logging = debounce(function(){ 
    alert("Heavy task"); 
}, 5000); 

setTimeout(logging, 100);//callback executed after 5 seconds 

Дополнительная информация о том, как debounc e работает здесь http://qnimate.com/javascript-limit-function-call-rate/

0

Это зависит от того, какую функциональность вы хотите. Вот ссылка на страницу, которая имеет 2 больших функции: https://remysharp.com/2010/07/21/throttling-function-calls

дроссельные: процесс первый вызов, а затем душить следующие вызовы на основе порога (первый и последний вызов будет обработан, но только пара звонков между ними)

дребезга: не обрабатывать вызовы до тех пор, пока функция не была вызвана для задержки (только 1 будет вызван после вызова и достаточно периода)

Смежные вопросы