前端框架中常见的公共方法汇总:防抖节流

Posted 萌萌的DDD

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端框架中常见的公共方法汇总:防抖节流相关的知识,希望对你有一定的参考价值。

 一、为什么要用防抖和节流

       在浏览器中,频繁的DOM操作或发送请求会非常占用内存资源,而实际开发场景中,、又不可避免的会遇到持续触发或重复触发的事件和方法。处理不当或者放任不管就容易引起浏览器卡死,如:input的change事件,滚动条scroll事件等等。因此需要降低事件被触发的频次,防止过多的回调函数占用浏览器内存。

二、Vue中公共封装的防抖

防抖:当不断触发高频事件后设置一个标识,通过标识来判断高频事件是否结束,如果未结束责支触发一次事件,并且在标识内高频事件再次被触发,则重新计算时间。

/**
 * 函数防抖
 * @param fn
 * @param delay
 * @returns {Function}
 * @constructor
 */
export const _debounce = (fn, t) => {
  const delay = t || 500
  let timer
  // console.log(fn)
  // console.log(typeof fn)
  return function() {
    const args = arguments
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      timer = null
      fn.apply(this, args)
    }, delay)
  }
}

 二、Vue中公共封装的节流

节流:节流的意思是让函数有节制地执行,而不是毫无节制的触发一次就执行一次。就是在一段时间内,只执行一次。


/**
 * 函数节流
 * @param fn
 * @param interval
 * @returns {Function}
 * @constructor
 */
export const _throttle = (fn, t) => {
  let last
  let timer
  const interval = t || 500
  return function() {
    const args = arguments
    const now = +new Date()
    if (last && now - last < interval) {
      clearTimeout(timer)
      timer = setTimeout(() => {
        last = now
        fn.apply(this, args)
      }, interval)
    } else {
      last = now
      fn.apply(this, args)
    }
  }
}

总结:

节流不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数

防抖只是在最后一次事件后才触发一次函数。

以上是关于前端框架中常见的公共方法汇总:防抖节流的主要内容,如果未能解决你的问题,请参考以下文章

前端框架中常见的公共方法汇总:时间格式处理/数字格式处理

记录--Vue 3 中的极致防抖/节流(含常见方式防抖/节流)

前端初学者笔记JavaScript的防抖/节流函数

记录--Vue 3 中的极致防抖/节流(含常见方式防抖/节流)

浅析函数防抖与函数节流

js 防抖与节流原理