返回

戏说前端 JavaScript 之『防抖节流』基础知识

前端

函数防抖和函数节流是前端开发中常用的两种优化性能的技术,它们都可以用来减少函数的执行次数,从而提高程序的运行效率。

函数防抖

函数防抖的原理是,在规定时间内只执行一次函数。如果在规定时间内函数被多次触发,那么只有最后一次触发会真正执行函数,而前面的触发都会被忽略。

函数防抖通常用于处理一些需要在一段时间内只执行一次的事件,例如:

  • 表单验证
  • 搜索框输入
  • 窗口滚动

函数节流

函数节流的原理是,在规定时间内只执行一次函数。如果在规定时间内函数被多次触发,那么只有第一次触发会真正执行函数,而后面的触发都会被忽略。

函数节流通常用于处理一些需要在一定时间间隔内执行一次的事件,例如:

  • 窗口滚动
  • 鼠标移动
  • 键盘输入

比较

函数防抖和函数节流都是用来减少函数执行次数的技术,但它们的工作原理不同。函数防抖只执行最后一次触发,而函数节流只执行第一次触发。

在选择使用函数防抖还是函数节流时,需要根据具体的情况来决定。如果需要在一段时间内只执行一次函数,那么应该使用函数防抖。如果需要在一定时间间隔内执行一次函数,那么应该使用函数节流。

示例代码

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

// 函数节流
const throttle = (func, delay) => {
  let lastTime = 0;
  return (...args) => {
    const now = new Date().getTime();
    if (now - lastTime > delay) {
      lastTime = now;
      func.apply(this, args);
    }
  };
};

真实案例

在实际开发中,函数防抖和函数节流可以应用在许多场景中。例如:

  • 表单验证:在用户输入表单数据时,可以使用函数防抖来防止表单重复提交。
  • 搜索框输入:在用户输入搜索框时,可以使用函数防抖来减少搜索请求的次数,从而提高搜索效率。
  • 窗口滚动:在用户滚动窗口时,可以使用函数节流来减少窗口滚动事件的处理次数,从而提高页面的滚动性能。
  • 鼠标移动:在用户移动鼠标时,可以使用函数节流来减少鼠标移动事件的处理次数,从而提高页面的交互性能。
  • 键盘输入:在用户输入键盘时,可以使用函数节流来减少键盘输入事件的处理次数,从而提高页面的输入性能。

函数防抖和函数节流是前端开发中非常有用的两种技术,它们可以帮助我们优化应用程序的性能,提高用户体验。