innowed,
function callWrap(f, count){
var now, calls;
return function(){
if(!now||Date.now()- now > 1000) {now = Date.now();calls = 0};
while(Date.now()-now < 1000 && calls<count){ //вызывать функцию не чаще чем count раз в секунду
f.apply(this, arguments);
calls++;
}
};
}
//"медленная" функция
var arr = [];
for (var i = 0; i < 1000; i++) arr[i] = 0;
function walkLength(arr) {
for (var i = 0; i < arr.length; i++) arr[i]++;
console.log('done');
}
var test = callWrap(walkLength, 7000); //обёртываем функцию в декоратор
test(arr);
test(arr); //тут запуска не будет; секунда ещё не прошла но запущено 7000 функций
window.setTimeout(function() {
test(arr);
},15000)
test(arr);