实现iOS中的函数节流和函数防抖

函数防抖与节流

今天来和大家谈论一个非常有意思的话题,就是函数节流和函数防抖。
可能大家还不是非常了解这两个术语的意思,让我们先来看下他们的含义吧。

Throttling enforces a maximum number of times a function can be called over time. As in “execute this function at most once every 100 milliseconds.”

首先是函数节流(Throttling),意思就是说一个函数在一定时间内,只能执行有限次数。比如,一个函数在100毫秒呢,最多只能执行一次。当然,也可以不执行!

看完了节流,我们再来看看函数防抖(Debouncing)。

Debouncing enforces that a function not be called again until a certain amount of time has passed without it being called. As in “execute this function only if 100 milliseconds have passed without it being called.”

函数防抖的意思就是,一个函数被执行过一次以后,在一段时间内不能再次执行。比如,一个函数执行完了之后,100毫秒之内不能第二次执行。

咦?有人看到这,肯定就有疑惑了,这两玩意有啥区别啊?这么解释吧,函数防抖可能会被无限延迟。用现实乘坐公交车中的例子来说,Throttle就是准点就发车(比如15分钟一班公交车);Debounce就是黑车,上了一个人以后,司机说,再等一个人,等不到,咱么10分钟后出发。但是呢,如果在10分钟内又有一个人上车,这个10分钟自动延后直到等待的10分钟内没人上车了。换句话说,Debounce可以理解成merge一段时间的一系列相同函数调用。

如果还不能理解,这里有个很好玩的在线演示 (PS:你必须用电脑上)

JavaScript中的函数节流和防抖

说到防抖和节流,我们就不得不先来提一提JavaScript中坑爹的DOM操作。我们直接看underscore.js中的源码:
首先是Throttle:

_.throttle = function(func, wait) {
  var context, args, result;
  var timeout = null;

  var previous = 0;
  var later = function() {
    // 若设定了开始边界不执行选项,上次执行时间始终为0
    previous = options.leading === false ? 0 : _.now();
    timeout = null;
    result = func.apply(context, args);
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值