防抖和节流

防抖:

是指频繁触发的情况下,只有足够的空闲时间,才执行代码一次
在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时

防抖应用场景:

  1. search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
  2. window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
// 函数防抖
const debounce = (fn, delay) => {
  let timer = null

  return (...args) => {
    clearTimeout(timer)
    timer = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}

节流:

规定一个单位时间内,只触发一次函数

节流应用场景:

  1. 鼠标不断点击触发,mousedown(单位时间内只触发一次)
  2. 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断
// 函数节流
const throttle = (fn, delay = 500) => {
  let flag = true

  return (...args) => {
    if (!flag) return
    flag = false
    setTimeout(() => {
      fn.apply(this, args)
      flag = true
    }, delay)
  }
}

document.body.addEventListener('scroll', throttle(foo, 2000));

原文参照:https://juejin.im/entry/5b1d2d54f265da6e2545bfa4

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    meng_281e阅读 196评论 1 0
  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    Grace_feb3阅读 401评论 0 0
  • 其实早就听说了节流和防抖的解决方案。这两个的目的都是为了提升页面中监听事件的性能。才疏学浅,如果有错误,也希望各位...
    Katherine的小世界阅读 1,916评论 0 6
  • 在前端开发过程中,我们经常需要绑定一些持续触发事件,如:resize、scroll、mousemove等等,但有些...
    廊桥梦醉阅读 6,079评论 0 40
  • android:app1和app2代码融合方案 前言:因为两个app主工程都需要共用,只是存在不同差异的界面和资源...
    六_六阅读 43,053评论 8 45