JavaScript是事件驱动的,大量的操作会触发事件,加入到事件队列中处理。

对于某些频繁的事件处理会造成性能的损耗,我们就可以通过防抖和节流来限制事件频繁的发生。

防抖:当事件触发时,相应的函数并不会立即触发,而是会等待一定的时间

function debounce(callback, interval) {
  let timer = null;
  return function (...args) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      callback.apply(this, args);
      timer = null;
    }, interval);
  };
}

节流:当事件触发时,无论中间触发多少次事件,函数的执行频率总是固定的

function throttle(callback, interval) {
  let startTime = 0;
  return function (...args) {
    const nowTime = new Date();
    if (nowTime - startTime >= interval) {
      callback.apply(this, args);
      startTime = nowTime;
    }
  };
}