防抖和节流

前言

在日常开发中会经常有“按钮点击查询,搜索框输入内容联想内容,监听鼠标移动事件”等等类似业务,这时经常会听到Leader说要做好优化。这里就可以使用到防抖以及节流去做优化。

防抖

防抖的目标是确保在一定时间内只执行一次函数。当事件触发后,会设置一个定时器,如果在设定的时间内再次触发相同事件,则会取消之前的定时器,重新设置一个新的定时器。只有当定时器到期后,才会执行相应的函数。

示例

function debounce(func, delay) {
  let timeoutId;

  return function() {
    const context = this;
    const args = arguments;

    clearTimeout(timeoutId);

    timeoutId = setTimeout(function() {
      func.apply(context, args);
    }, delay);
  };
}

// 示例用法
const debouncedFunc = debounce(function() {
  console.log('Debounced Function');
}, 200);

debouncedFunc(); // 立即调用,不执行函数
debouncedFunc(); // 忽略
debouncedFunc(); // 忽略

// 等待200毫秒后执行函数
 

节流

节流的目标是确保在一定时间内不会频繁执行函数。当事件触发后,会设置一个时间,只有到达一定时间后才执行相应的函数。一旦函数执行完毕,标志位会被重置,允许下一次事件触发时再次执行函数。

示例

function throttle(func, delay) {
  let lastExecTime = 0;

  return function() {
    const context = this;
    const args = arguments;

    const currentTime = Date.now();

    if (currentTime - lastExecTime >= delay) {
      func.apply(context, args);
      lastExecTime = currentTime;
    }
  };
}

// 示例用法
const throttledFunc = throttle(function() {
  console.log('Throttled Function');
}, 200);

throttledFunc(); // 立即调用,执行函数
throttledFunc(); // 忽略
throttledFunc(); // 忽略

// 等待200毫秒后执行函数
 

总结

防抖确保了在事件频繁触发的情况下,只会在最后一次触发之后的一段时间内执行一次。

节流则确保了一段时间内只执行一次操作,即便在这段时间内多次触发事件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值