防抖--节流(归纳总结)

202 阅读1分钟

[借鉴文章](前端性能优化篇: 防抖和节流 - 掘金 (juejin.cn))

防抖节流的意义:

  • 当函数绑定一些持续触发的事件如:scroll、mousemove ,键盘输入,多次快速click等等,
  • 如果每次触发都要执行一次函数,会带来性能下降,资源请求太频繁等问题
  • 可以提高计算机性能,提升用户体验

1. 防抖

  • 所谓防抖,就是指触发事件后 n 秒后才执行函数,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。

  • 代码演示:

 /**
     * 此例演示想要在控制台输出111
     * 点击之后首先清除延时器
     * 紧接着设置一个延时器
     * 只要在一秒内连续点击,延时器就不会被触发
     * 只有点击间隔超过一秒才会触发延时器在控制台输出111
    */
const btn = document.querySelector('.btn')
    let timeId
    btn.addEventListener('click', ()=>{
      clearTimeout(timeId)//清除延迟器
      timeId = setTimeout(()=>{
        console.log(111)
      },1000)
    })
}

2. 节流

所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。 节流会稀释函数的执行频率

  • 代码演示:
/**
     * 此例演示想要在控制台输出111
     * 点击之后首先判断是否有延时器
     * 没有则定义一个延时器
     * 延迟器执行时,在最后令timeId为空
     * 可以使1s后再次点击可以重新设置延时器
     * 以此达到1s内只能输出一次111
    */
    const btn = document.querySelector('.btn')
    let timeId
    btn.addEventListener('click', ()=>{
      if(!timeId){
        timeId = setTimeout(()=>{
        console.log(111)
        timeId = null
      },1000)
      }
    })

总结:

防抖节流可以提高浏览器性能,提升用户体验感。本人学历尚浅,此文适合初学者查阅。简单易懂!