防抖和节流是什么

103 阅读1分钟
  1. 节流:

     -   节流: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效
         -   function debounce(func, delay) {
     let timer = null // 计时器
     return function (...args) {
       clearTimeout(timer) // 清除上一次计时器
       timer = setTimeout(() => {
         // 重新定时
         func.apply(this, args)
           }, delay)
         }
       }
    

2.防抖:

     - 防抖是指在事件触发n秒后再执行,如果在n秒内再次被触发,则重新计算时间。(就是在触发某个事件后,在下一次触发之前,
     -中间的间隔时间如果超过设置的时间才会发送请求,一直触发就不会发送请求
     

3.区别

        - 相同点:

    都可以通过使用 setTimeout 实现
    目的都是,降低回调执行频率。节省计算资源
    
    
       - 不同点:
    函数防抖,在一段连续操作结束后,处理回调,利用clearTimeoutsetTimeout实现。函数节流,在一段连续操作中,每一段时间只执行一次,频率较高的事件中使用来提高性能
    函数防抖关注一定时间连续触发的事件,只在最后执行一次,而函数节流一段时间内只执行一次

4.应用场景

     - 防抖
    a、scroll事件滚动触发,\
    b、搜索框输入查询\
    c、表单验证\
    d、按钮提交事件\
    e、浏览器窗口缩放,resize事件
    
    -节流
      滚动加载,加载更多或滚到底部监听
      搜索框,搜索联想功能