啥是防抖和节流的机制?

118 阅读1分钟

防抖(Debouncing)和节流(Throttling)都是用来控制某个函数执行频率的技术,通常在处理用户输入、滚动事件等频繁触发的操作中使用,以提高性能和用户体验。

防抖(Debouncing):

防抖的基本思想是在触发事件后,等待一定的时间间隔,如果在这个时间间隔内再次触发事件,则重新计时。如果时间间隔内没有再次触发事件,那么执行相应的操作。

实现方式:

javascript
function debounce(func, delay) {
  let timer;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, arguments);
    }, delay);
  };
}

// 示例使用
const debouncedFunction = debounce(() => {
  // 执行需要防抖的操作
  console.log('Debounced function executed');
}, 1000);

// 触发防抖函数
debouncedFunction();

节流(Throttling):

节流的基本思想是在一定的时间间隔内只执行一次事件,即使在这段时间间隔内触发了多次事件。

实现方式:

javascript
function throttle(func, delay) {
  let canRun = true;
  return function() {
    if (!canRun) return;
    canRun = false;
    setTimeout(() => {
      func.apply(this, arguments);
      canRun = true;
    }, delay);
  };
}

// 示例使用
const throttledFunction = throttle(() => {
  // 执行需要节流的操作
  console.log('Throttled function executed');
}, 1000);

// 触发节流函数
throttledFunction();

在防抖和节流中,delay 参数表示两次执行之间的最小时间间隔。防抖适用于例如搜索框输入,只在用户停止输入一段时间后才执行搜索操作。而节流适用于滚动事件,确保一定时间内只触发一次滚动处理函数,避免过于频繁的执行。

选择防抖还是节流取决于具体的需求和场景。