根据下划线文档
throttle_.throttle(函数,等待) 创建并返回传递函数的新的节流版本,该函数在反复调用时,实际上每等待毫秒最多只调用一次原始函数。对于速度限制的事件非常有用,因为这些事件发生得比你能跟上的要快。
Useful for rate-limiting events that occur faster than you can keep up with是什么意思?
这个函数等价于调用自己的函数的setTimeout?
有人能给我举些关于小提琴的例子吗?
发布于 2012-05-01 08:32:40
不只是setTimeout()尝试一下
var a = _.throttle(function(){console.log('called')}, 1000);
while(true) {
a();
}它将每秒钟调用一次,而不是每次迭代一次。在本机JS中,它看起来像:
var i = null;
function throttle(func, delay){
if (i) {
window.clearTimeout(i);
}
i = window.setTimeout(func, delay)
}不完全相同,只是为了说明这个函数被调用了一次。
发布于 2013-01-14 06:34:51
扩展达哈泽的回答
它更像,除了_.throttle被紧急调用,然后在delay毫秒之后再次调用
function throttle(func, delay) {
var timer = 0;
return function() {
var context = this,
args = [].slice.call(arguments);
clearTimeout(timer);
timer = setTimeout(function() {
func.apply(context, args);
}, delay);
};
}发布于 2014-10-08 23:02:35
我发现这个很棒的小提琴帮了我:
/2wn5钼dg/1 (由@max23_更新)
在我的例子中,我需要节流,因为一个函数(是一个服务器请求)在1秒内被调用了大约500次,并且正在重载服务器。因此,我改变了它,使该函数只能被调用最大一次每3秒。因此,不管它被调用了多少次,它每3秒最多只发生一次。
就像这样:
var informationFromServer;
var a = _.throttle(function(){
informationFromServer = serverCallFunction();
}, 3000);
function getsCalledALot()
{
a();
}
function serverCallFunction()
{
var data = $.post....
return data;
}https://stackoverflow.com/questions/10395227
复制相似问题