乐趣区

关于javascript:JS的防抖与节流-springboot实战电商项目mall4j

JS 的防抖与节流

springboot 实战电商我的项目 mall4j(https://gitee.com/gz-yami/mall4j)

什么是防抖?

函数防抖(debounce): 在事件被触发 n 秒后再执行回调,如果在这 n 秒内又被触发,则从新计时

什么是节流

函数节流 (throttle): 规定一个单位工夫,在这个单位工夫内,只能有一次触发事件的回调函数执行,如果在同一个单位工夫内某事件被触发屡次,只有一次能失效。

利用场景

对于函数防抖,有以下几种利用场景:

  • 给按钮加函数防抖避免表单屡次提交。
  • 对于输入框间断输出进行 AJAX 验证时,用函数防抖能无效缩小申请次数。

总的来说,适宜屡次事件 一次响应 的状况

对于函数节流,有如下几个场景:

  • 游戏中的刷新率
  • DOM 元素拖拽
  • Canvas 画笔性能

总的来说,适宜 大量事件 按工夫做 均匀 调配触发。

函数防抖

function debounce (fn, wait) {
  let timer
  return (...args) => {clearTimeout(timer)
    timer = setTimeout(() => {fn(...args)
    }, wait)
  }

函数节流

function throttle (fn, wait) {
  let timer
  return (...args) => {if (timer) {return}
    timer = setTimeout(() => {fn(...args)
      timer = null
    }, wait)
  }

小结

  • 防抖:避免抖动,单位工夫内事件触发会被重置,防止事件被误伤触发屡次。代码实现重在清零 clearTimeout
  • 节流:管制流量,单位工夫内事件只能触发一次,代码实现重在开锁关锁 timer=timeout; timer=null

springboot 实战电商我的项目 mall4j(https://gitee.com/gz-yami/mall4j)

退出移动版