首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >underscore.js:_.throttle(函数,等待)

underscore.js:_.throttle(函数,等待)
EN

Stack Overflow用户
提问于 2012-05-01 08:18:14
回答 5查看 21.7K关注 0票数 13

根据下划线文档

throttle_.throttle(函数,等待) 创建并返回传递函数的新的节流版本,该函数在反复调用时,实际上每等待毫秒最多只调用一次原始函数。对于速度限制的事件非常有用,因为这些事件发生得比你能跟上的要快。

Useful for rate-limiting events that occur faster than you can keep up with是什么意思?

这个函数等价于调用自己的函数的setTimeout?

有人能给我举些关于小提琴的例子吗?

EN

回答 5

Stack Overflow用户

发布于 2012-05-01 08:32:40

不只是setTimeout()尝试一下

代码语言:javascript
复制
var a = _.throttle(function(){console.log('called')}, 1000);
while(true) {
  a();
}

它将每秒钟调用一次,而不是每次迭代一次。在本机JS中,它看起来像:

代码语言:javascript
复制
var i = null;
function throttle(func, delay){
  if (i) {
      window.clearTimeout(i);
  }
  i = window.setTimeout(func, delay)
}

不完全相同,只是为了说明这个函数被调用了一次。

票数 9
EN

Stack Overflow用户

发布于 2013-01-14 06:34:51

扩展达哈泽的回答

它更像,除了_.throttle被紧急调用,然后在delay毫秒之后再次调用

代码语言:javascript
复制
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);
    };
}
票数 4
EN

Stack Overflow用户

发布于 2014-10-08 23:02:35

我发现这个很棒的小提琴帮了我:

/2wn5钼dg/1 (由@max23_更新)

在我的例子中,我需要节流,因为一个函数(是一个服务器请求)在1秒内被调用了大约500次,并且正在重载服务器。因此,我改变了它,使该函数只能被调用最大一次每3秒。因此,不管它被调用了多少次,它每3秒最多只发生一次。

就像这样:

代码语言:javascript
复制
var informationFromServer;
var a = _.throttle(function(){
    informationFromServer = serverCallFunction();
}, 3000);

function getsCalledALot()
{
    a();
}

function serverCallFunction()
{
    var data = $.post....
    return data;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10395227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档