美文网首页
搜索框:节流与去抖动

搜索框:节流与去抖动

作者: 葶寳寳 | 来源:发表于2019-03-20 11:31 被阅读0次

debounce:去抖动
throttle:节流

为什么会出现节流与去抖动?

当我们在搜索框输入关键词进行搜索时,我们并不希望看到每输入一个拼音就向服务器发送一次请求,这样会对服务器造成一定的压力。而这两个词的出现,就是为了缓解这个问题,可以避免事件的频繁出发,也是两种解决方案。

  1. debounce:利用定时器,让函数执行延迟固定的时间执行:比如500毫秒,在500毫秒内如果有函数又被调用则删除上一次调用,这次调用500毫秒后执行,如此往复。就是当你停止输入500毫秒后才会执行函数。
  debounce(func, wait) {
    // wait:500ms;func:被频繁触发的事件
    let timeout;
    return function () {
      let context = this;
      let args = arguments;
      let later = () => {
        timeout = null;
        func.apply(context, args);
      };
      clearTimeout(timeout);
      timeout = setTimeout(later, wait);
    }
  },
  1. throttle:会预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期。
// 方法一
  function throttle(method, delay, time) {
     var timeout, startTime = +new Date();
     return function() {
         var context = this,
         args = arguments,
         curTime = +new Date();
         clearTimeout(timeout);
         // 如果达到了规定的触发时间间隔,触发 handler
         if (curTime - startTime >= time) {
           method.apply(context, args);
           startTime = curTime;
         } else {
           // 没达到触发间隔,重新设定定时器
           timeout = setTimeout(method, delay);
        }
 };

// 方法二
 function throttle(fn, gapTime) {
    let _lastTime = null
    return function () {
      let _nowTime = + new Date()
      if (_nowTime - _lastTime > gapTime || !_lastTime) {
        _lastTime = _nowTime;
        fn.apply(this, arguments)  
      }
    }
  }

两者的区别:
onscroll事件来说,如果使用的是抖动的话,只用当滚动停止后才会执行回调函数,在滚动的过程是不会执行的;节流不同,滚动的时候每隔一个时间周期就会执行一次回调,然后进入下一个新周期。

具体使用时,需根据具体的业务场景来做选择:
节流:滚动事件、座位图的缩放等;
防抖动:搜索框

参考文章:
js函数节流和去抖动

相关文章

  • 搜索框:节流与去抖动

    debounce:去抖动throttle:节流 为什么会出现节流与去抖动? 当我们在搜索框输入关键词进行搜索时,我...

  • 图解防抖动与节流模式

    防抖动 防抖动立即触发 防抖动 节流 节流立即触发 节流 总结 防抖动:将多个操作合并为一个操作(例如,键盘输入关...

  • 前端函数防抖(debounce)和函数节流(throttle)

    什么是防抖和节流: 比如搜索框,用户在输入的时候使用change事件去调用搜索,如果用户每一次输入都去搜索的话,那...

  • 防抖动与节流

    自古人生一世,需有一技之长,我辈既务斯业,便当专心用功,以后名扬四海,根据全在年轻。——霸王别姬 好友给我发了一张...

  • JS防抖和节流

    一、什么是防抖和节流 Ps: 比如搜索框,用户在输入的时候使用change事件去调用搜索,如果用户每一次输入都去搜...

  • 函数节流与函数防抖

    函数节流 适用场景:按钮防重复点击 函数防抖 适用场景:input输入框搜索

  • JS中的节流和去抖动

    首先要明白 节流 Throttle 和 去抖动 Debounce 两者是有区别的,很多人一开始都会搞混。先讲讲去抖...

  • 防抖动与节流阀

    这两个名次早前听小伙伴们说起过,大概了解他们是性能优化的方式,但是没有在项目里用过,最近联想到项目里的一些场景,觉...

  • 输入框输入搜索节流函数

    我们做输入搜索的时候并不希望看到每输入一个拼音就向服务器发送一次请求,这样会对服务器造成一定的压力,这里跟大家分享...

  • 07RxJS过滤类操作符

    audit(节流) 频繁地触发某一事件,设置其在规定的时间内只触发一次,达到节流的效果(用于搜索框中请求数据等)在...

网友评论

      本文标题:搜索框:节流与去抖动

      本文链接:https://www.haomeiwen.com/subject/jvqzmqtx.html