«

防抖与节流的作用及运用场景

时间:2023-5-30 19:08     作者:六思逸     分类: JavaScript


防抖与节流的作用?

防抖和节流都是为了减少函数被频繁调用,从而提高性能。

防抖与节流的用途?

假设你正在为一个搜索框编写代码。当用户输入字符时,JS 代码就会被调用,以便实时响应用户输入并展示搜索结果。但是,如果用户输入非常快,比如一秒钟能够输入几十个字符,那么这个 JS 代码会被频繁地调用,导致页面变得很卡。为了解决这个问题,我们可以使用防抖或节流技术来限制函数的调用次数。

防抖:等待一段时间,比如500毫秒,如果在这段时间内用户的输入没有发生变化,那么就执行这个函数一次。如果用户输入产生了新的变化,就再等待500毫秒。这样做的好处是,可以避免函数被频繁调用,只在用户输入有所改变时才调用函数。

节流:限制函数的调用频率,比如一秒钟只调用一次函数。如果在一秒钟内用户输入多次,也只调用一次函数。这样做的好处是,可以控制函数的调用次数,避免出现过多的计算或者渲染,提高页面的性能。

防抖 (Debounce):

指触发事件后在一个固定时间内没有再次触发该事件,才会执行该事件。

防抖的运用场景:

  1. 按钮点击事件,防止重复提交
  2. 搜索框输入事件,避免频繁请求后台接口
  3. 窗口大小改变事件,避免频繁触发重渲染
  4. Scroll 滚动事件,避免频繁触发后台数据请求

实现防抖的方法:

实现防抖的方法是在函数触发时,使用一个定时器,用于延迟执行函数。如果在延迟时间内再次触发了该函数,就清除之前的定时器,重新开始计时。

function debounce(fn, delay) {
  let timeoutId = null;
  return function() {
    const context = this;
    const args = arguments;
    clearTimeout(timeoutId);
    timeoutId = setTimeout(function() {
      fn.apply(context, args);
    }, delay);
  };
}

节流 (Throttle):

指连续触发事件,但是在 n 秒内只执行一次函数。

节流的运用场景:

  1. 抢购活动,避免重复点击购买按钮
  2. 鼠标移动事件,避免频繁调用动画状态
  3. 窗口滚动事件,避免频繁执行 DOM 操作
  4. 监听 DOM 元素大小,避免频繁触发其他操作

实现节流的方法:

实现节流的方法是在函数执行时刻,判断当前时间与上一次执行函数的时间间隔是否超过设定时间 n,如果超过,则执行该函数,并更新上一次执行时间。

function throttle(fn, wait) {
  let lastTime = 0;
  return function() {
    const currentTime = Date.now();
    if (currentTime - lastTime > wait) {
      lastTime = currentTime;
      fn.apply(this, arguments);
    }
  };
}

标签: JavaScript 防抖 节流 性能优化 Web前端开发

版权所有:六思逸
文章标题:防抖与节流的作用及运用场景
除非注明,文章均为 六思逸 原创,转载请注明作者和出处 六思逸

扫描二维码,在手机上阅读

推荐阅读: