如何限制javascript函数允许自己被调用的速度?

Hen*_*ndo 17 javascript

我有一个JavaScript函数,实际上最终会进行服务器端调用.我想限制调用此函数的速率.

什么是一种简单的方法我可以限制我的javascript函数被调用的速度说200-500毫秒左右?我应该使用javascript计时器控件吗?

thi*_*ign 6

像图书馆瓶颈节点速率限制几乎涵盖所有用例。


Mat*_*dan 5

首先,您需要确定是否要限制速率,因为您忽略了在等待期间所做的所有函数调用,或者您是否只想排队请求以确保您永远不会超过X个请求第二.

如果您想要前一个解决方案(忽略新的函数调用),那么您应该查看http://documentcloud.github.com/underscore/#throttle

如果你想限速,这样你就不会每秒调用你的函数超过X次,但是不要完全失去那些函数调用,那么你需要一个完全不同的解决方案.

我在https://gist.github.com/1084831写了下划线扩展 您可以在http://jsbin.com/upadif/8/edit#preview上看到一个工作示例


Ste*_*hen 5

如果您的问题涉及创建太多工作,请使用队列:

const work_queue = [];

function queue(message) {
  work_queue.push(message)  
}


function run() {
  const work = work_queue.shift();
  if (work !== undefined) {
    scan_one(work);
  }
}

setInterval(run, 15);
Run Code Online (Sandbox Code Playgroud)

如果您的问题涉及调用过于频繁的函数:

let last = +new Date();

function run() {
  const now = +new Date();
  if (now - last > 5000) { // 5 seconds
    last = now;
    run_once();
  }
}



Run Code Online (Sandbox Code Playgroud)


Óla*_*age 2

您可以创建一个在调用函数时引发的标志并启动计时器,如果引发此标志则您无法调用该函数,然后在一定时间后,调用计时器并关闭该标志,从而允许您再次调用该函数。

标志可以是任何东西,比如布尔值或其他东西。