我有一个JavaScript函数,实际上最终会进行服务器端调用.我想限制调用此函数的速率.
什么是一种简单的方法我可以限制我的javascript函数被调用的速度说200-500毫秒左右?我应该使用javascript计时器控件吗?
首先,您需要确定是否要限制速率,因为您忽略了在等待期间所做的所有函数调用,或者您是否只想排队请求以确保您永远不会超过X个请求第二.
如果您想要前一个解决方案(忽略新的函数调用),那么您应该查看http://documentcloud.github.com/underscore/#throttle
如果你想限速,这样你就不会每秒调用你的函数超过X次,但是不要完全失去那些函数调用,那么你需要一个完全不同的解决方案.
我在https://gist.github.com/1084831写了下划线扩展 您可以在http://jsbin.com/upadif/8/edit#preview上看到一个工作示例
如果您的问题涉及创建太多工作,请使用队列:
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)
您可以创建一个在调用函数时引发的标志并启动计时器,如果引发此标志则您无法调用该函数,然后在一定时间后,调用计时器并关闭该标志,从而允许您再次调用该函数。
标志可以是任何东西,比如布尔值或其他东西。