当前位置:首页 > 技术分析 > 正文内容

防抖与节流(防抖与节流的区别和使用场景)

防抖(Debounce)和节流(Throttle)是两种常见的性能优化技术,用于控制函数在高频事件(如滚动、输入、点击等)中的执行频率。它们的本质区别在于对事件触发的处理逻辑不同:

1. 防抖(Debounce)

  • 本质
    延迟执行,在事件被频繁触发时,只有最后一次触发后等待一定时间没有新触发,才会执行函数。
    • 类似于“等待用户停止操作后再执行”。
    • 如果事件持续触发,函数会一直被延迟,直到触发间隔超过设定的时间。
  • 核心逻辑
    每次触发时重置计时器,重新开始等待。
  • 典型场景
    • 搜索框输入(用户停止输入后再发送请求)。
    • 窗口大小调整(调整结束后再计算布局)。
  • 代码示例
function debounce(fn, delay) {
  let timer;
  return function() {
    clearTimeout(timer); // 重置计时器
    timer = setTimeout(() => fn.apply(this, arguments), delay);
  };
}

2. 节流(Throttle)

  • 本质
    固定频率执行,在事件频繁触发时,函数按照设定的时间间隔周期性执行
    • 类似于“无论触发多快,每 X 毫秒只执行一次”。
    • 即使事件持续触发,函数也会按固定节奏执行。
  • 核心逻辑
    通过时间戳或标志位判断是否到达执行周期。
  • 典型场景
    • 滚动事件(每隔一段时间计算位置)。
    • 高频点击(如游戏射击按钮)。
  • 代码示例(时间戳版):
function throttle(fn, delay) {
  let lastTime = 0;
  return function() {
    const now = Date.now();
    if (now - lastTime >= delay) {
      fn.apply(this, arguments);
      lastTime = now;
    }
  };
}

关键区别总结

特性

防抖(Debounce)

节流(Throttle)

执行时机

最后一次触发后等待 delay 毫秒执行

每隔 delay 毫秒固定执行一次

重置延迟

每次触发都会重置计时器

按时间周期触发,不重置计时器

极端情况

如果持续触发,函数永远不执行

即使持续触发,也会按间隔执行

适用场景

关注结果(如输入停止后搜索)

关注过程(如滚动时实时计算位置)

直观比喻

  • 防抖电梯门等待最后一个人进入后关闭(如果一直有人进,门会一直不关)。
  • 节流地铁发车,每隔 5 分钟一班(不管多少人排队)。

根据实际需求选择合适的技术:需要减少执行次数但确保最终结果时用防抖,需要均匀分摊执行压力时用节流

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3883.html

标签: js 防抖函数
分享给朋友:

“防抖与节流(防抖与节流的区别和使用场景)” 的相关文章

教培收费管理系统有哪些?

大部分培训机构走上正轨后,随着学员数量不断增长,各种业务和课程报名费用项目逐渐增多,如果还是采用传统的人工收费,就势必会出现算错账或收支对不上的问题。此时,再去查询哪里出了问题是一件非常难的事情。因此,很多培训机构都会使用机构收费系统。那培训机构收费系统有哪些呢?校宇宙是一款适合培训学校内部使用的信...

供热收费管理系统一户多标准版

供热收费管理系统一户多标准版headerfooter《供热收费管理系统一户对标准版》是一款针对冬季供暖收费的管理软件,针对用户相同地址,存在不同的收费方式。同样为供热公司的规范收费、加强管理、提高服务档次必备的管理系统。 本系统包括:基础信息、收费管理等二个大模块。主要功能:1.基础信息(供热区设置...

GitLab-创建分支

描述分支是独立的生产线,是开发过程的一部分。分支的创建涉及以下步骤。创建一个分支步骤1-登录您的GitLab帐户,然后转到“ 项目”部分下的项目。步骤2-要创建分支,请单击“ 存储库”部分下的“ 分支”选项,然后单击“ 新建分支”按钮。步骤3-在“ 新建分支”屏幕中,输入分支的名称,然后单击“ 创建...

15款测试html5响应式的在线工具

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面15款工具可以方便测试你的html5响应式效果。Responsinatorhttp://www.re...

el-table内容\n换行解决办法

问题请求到的数据带有换行符 '\n'但页面展示时不换行statusRemark: "\"1、按期完成计划且准确率100%,得100分;\n2、各项目每延误1天,扣1分;每失误1次或者员工投诉1次,扣3分,失误层面达到公司级影响较大的,该项绩效分数为0\"\n&...

佳能 EOS R8 深度评测

佳能 EOS R8 的定位是入门级全画幅无反光镜可换镜头相机。尽管在产品阵容中处于这一位置,R8 仍然是一个强大的相机,配备了先进的 R6 II 同款成像传感器、快速处理器和令人难以置信的自动对焦系统,体积小、重量轻、价格低。这款相机是发烧友、旅行者、家庭以及任何想要全画幅传感器相机的人的绝佳选择。...