返回

手撕防抖节流那些事儿

前端

防抖与节流

防抖和节流是JavaScript中常用的两种事件处理技巧,它们可以帮助开发者优化代码的性能,提高用户体验。

防抖

防抖(debounce)是一种技术,它可以限制函数在指定的时间间隔内只执行一次。也就是说,如果函数在指定的时间间隔内被多次触发,它只会执行最后一次。

防抖通常用于处理用户输入事件,比如表单输入、搜索框输入等。在这些场景中,我们通常不希望函数在用户每次输入时都执行,而是希望它在用户输入一段时间后才执行。这样可以避免不必要的函数调用,提高代码的性能。

节流

节流(throttle)是一种技术,它可以限制函数在指定的时间间隔内最多执行一次。也就是说,如果函数在指定的时间间隔内被多次触发,它只会执行第一次。

节流通常用于处理高频事件,比如页面滚动、鼠标移动等。在这些场景中,我们通常不希望函数在每次事件触发时都执行,而是希望它在一定的时间间隔内只执行一次。这样可以避免不必要的函数调用,提高代码的性能。

手撕防抖与节流

我们可以自己实现防抖和节流函数,而不需要借助于第三方库。下面是手撕防抖和节流函数的实现代码:

// 防抖函数
function debounce(func, wait) {
  let timer = null;
  return function(...args) {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      func.apply(this, args);
      timer = null;
    }, wait);
  };
}

// 节流函数
function throttle(func, wait) {
  let lastCallTime = 0;
  return function(...args) {
    const now = Date.now();
    if (now - lastCallTime >= wait) {
      func.apply(this, args);
      lastCallTime = now;
    }
  };
}

应用场景

防抖和节流在实际开发中有很多应用场景,比如:

  • 表单输入验证:我们可以使用防抖函数来限制表单输入验证的频率,避免不必要的验证调用。
  • 搜索框输入建议:我们可以使用防抖函数来限制搜索框输入建议的频率,避免不必要的建议请求。
  • 页面滚动事件处理:我们可以使用节流函数来限制页面滚动事件处理的频率,避免不必要的函数调用。
  • 鼠标移动事件处理:我们可以使用节流函数来限制鼠标移动事件处理的频率,避免不必要的函数调用。

总结

防抖和节流是JavaScript中常用的两种事件处理技巧,它们可以帮助开发者优化代码的性能,提高用户体验。我们可以自己实现防抖和节流函数,而不需要借助于第三方库。防抖和节流在实际开发中有很多应用场景,比如表单输入验证、搜索框输入建议、页面滚动事件处理、鼠标移动事件处理等。