防抖和节流的简单理解

       在开发页面的时候经常会绑定一些不停触发的事件,比如 input 输入事件和 scroll 滚动事件,这些事件,只要触发事件就会在一段时间内连续触发,导致页面负载家中,影响体验,所以我们不希望这些事件在一段时间内不停的做一些重复而且毫无意义的操作,这时我们需要用 防抖和节流限制这些事件的调用频率,并且不影响体验。

 

防抖(debounce)

       当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。

//可以在控制台输出下面的代码
window.onresize = ()=> {
        console.log('onresize');
    };

可以看到当我们改变浏览器窗口的大小时,打印台会不停的输出,这种情况并不是我们需要的

//防抖代码
function throttle(method,context){
            clearTimeout(method.timer)
            method.timer = setTimeout(function(){
                method.call(context)
            },500)
  
//这时我们在调用会发现事件不会被连续的调用了

节流(throttle)

        当持续触发事件时,保证一定时间段内只调用一次事件处理函数。例如:水龙头,我们可以控制水龙头的阀门让其流淌的大小可以改变。

    hInput () {
      const dt = Date.now() // 获取当前时间戳 ms为单位
      if (dt - this.startTime > 500) {
        this.doAjax()
        this.startTime = dt
      } else {
        console.log('当前的时间戳是', dt, '距离上一次执行不够500ms,所以不执行')
      }
    },
    async doAjax () {
      if (this.keyword === '') {
        this.suggestions = []
        return
      }

      try {
        const res = await getSuggestion(this.keyword)
        // console.log(res)
        this.suggestions = res.data.data.options
      } catch (err) {
        console.log(err)
      }
    }

防抖和节流的区别

节流:是确保函数特定的时间内至多执行一次,限制调用的时间间隔
防抖:是函数在特定的时间内,不能再次触发,一旦触发,就要重新计时

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值