JavaScript防抖和节流

本文深入探讨了防抖和节流两种前端优化技术的概念、应用场景及其实现代码。防抖用于控制事件触发频率,避免频繁操作导致的性能损耗;节流则确保函数在指定时间内最多执行一次,有效控制资源消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

防抖

  1. 概念:任务频繁触发的情况下,只有任务触发的间隔超过指定间隔的时候,任务才会触发。

所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。

  1. 应用:百度搜索框。输入关键词之后会调用接口,获取联想词。但是,频繁调用接口会影响性能,所有此时应使用防抖:只有在用户输入完毕的一小段时间后,才会调用接口,出现联想词。
  2. 代码
const debounce = (fn, delay) => {
 let timer = null;
 return (...args) => {
   clearTimeout(timer);
   timer = setTimeout(() => {
     fn.apply(this, args);
   }, delay);
 };
};

节流

  1. 概念:指定的时间间隔内只会执行一次任务。

所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。节流会稀释函数的执行频率。

对于节流,一般有两种方式可以实现,分别是时间戳版和定时器版。

  1. 应用
  • 抢购商品。如果不采用节流,那么会有人可以用脚本在很短的时间内触发按钮多次;
  • 懒加载要监听计算滚动条的位置,使用节流按一定时间的频率获取;
  1. 代码
const throttle = (fn, delay = 500) => {
 let flag = true;
 return (...args) => {
   if (!flag) return;
   flag = false;
   setTimeout(() => {
     fn.apply(this, args);
     flag = true;
   }, delay);
 };
};
参考链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值