防抖和节流的含义和应用场景

防抖(debounce)

debounce函数它在被调用后会等待一段时间(自己设置)再执行。 如果在等待期间函数再次调用,之前还未执行的调用会被取消。重新计时在继续执行

简单来说:只要前一个函数没有执行完,那么在进行新的调用,后一个会取代前一个,并重新计师,由最后一次事件触发决定

function debounce(fn, delay) {
        var timer = null;
        return function () {
          var context = this,
            args = arguments;
          // 如果此时存在定时器的话,则取消之前的定时器重新记时
          if (timer) {
            clearTimeout(timer);
            timer = null;
          }
          // 设置定时器,使事件间隔指定事件后执行
          timer = setTimeout(() => {
            fn.apply(context, args);
          }, delay);
        };
      }

节流(throttle)

throttle函数的目的很简单, 规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。

简单来说:在一个段时间内只能只能做一件事,由第一次事件触发决定

function throttle2(fn, delay) {
  let last = null
  return function throttle_fn() {
    if(last === null) {
      last = setTimeout(() => {
        fn.apply(this, arguments)
        last = null // 清除已执行的计时器标记
      }, delay)
    }
  }
}

 应用场景

防抖(debounce)

    search搜索联想,用户在不断输入值时,用防抖来节约请求资源。

    window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次

  节流(throttle)

    鼠标不断点击触发,mousedown(单位时间内只触发一次)

    监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断

               发送手机验证码,点击第一次需要在一分钟以后才能在次点击才能再次发送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
防抖节流是两种常用的性能优化技术,它们在不同的应用场景下有不同的用途。 防抖应用场景: 1. 用户输入:在用户输入框中,当用户连续输入时,可以使用防抖来减少频繁的请求或操作。比如在搜索框中,用户连续输入时,可以使用防抖来延迟发送请求,只在用户停止输入一段时间后才发送请求,减少不必要的请求次数。 2. 窗口调整:在窗口大小调整的场景中,可以使用防抖来减少频繁的重绘或重新布局操作。比如在浏览器窗口大小调整时,可以使用防抖来延迟重新计算布局,只在用户停止调整窗口大小一段时间后才重新计算布局,提高性能和用户体验。 节流应用场景: 1. 滚动事件:在滚动事件中,可以使用节流来减少频繁的回调函数执行。比如在网页滚动时,可以使用节流来限制回调函数的执行频率,只在一定时间间隔内执行一次,减少不必要的计算和操作。 2. 鼠标移动事件:在鼠标移动事件中,可以使用节流来减少频繁的回调函数执行。比如在拖拽操作中,可以使用节流来限制回调函数的执行频率,只在一定时间间隔内执行一次,减少不必要的计算和操作。 总结来说,防抖适用于需要延迟执行的场景,可以减少频繁的请求或操作;节流适用于需要限制执行频率的场景,可以减少频繁的回调函数执行。根据具体的应用场景和需求,选择合适的技术可以提高性能和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值