news 2026/4/16 17:46:55

防抖和节流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
防抖和节流

在前端开发中,防抖(Debounce)和节流(Throttle)是两种用于优化高频率触发事件(如滚动、窗口缩放、键盘输入)的技术。它们的核心目的都是为了减少函数执行次数,从而提高页面性能,避免浏览器卡顿。


1. 防抖 (Debounce)

概念:在事件被触发 n 秒后再执行回调。如果在这 n 秒内事件又被触发,则重新计时

  • 形象比喻:就像电脑休眠。如果你一直在动鼠标,电脑就不会休眠;只有当你停止操作一段时间后,电脑才会进入休眠状态。
  • 应用场景
  • 搜索框输入查询:只有当用户停止打字一段时间后,才发送 API 请求。
  • 窗口大小调整(resize):窗口调整停止后,再重新计算布局。

2. 节流 (Throttle)

概念:规定在一个单位时间内,只能触发一次函数。如果在这个单位时间内触发了多次事件,只有**第一次(或最后一次)**生效。

  • 形象比喻:就像技能冷却(CD)。当你放了一个大招后,无论你狂按多少次按键,在冷却时间结束前,技能都不会再次释放。
  • 应用场景
  • 滚动监听(scroll):比如加载更多或计算瀑布流位置,不需要每滚动 1px 就计算一次,而是每隔 200ms 计算一次。
  • 抢购按钮点击:防止用户快速连续点击导致发送过多请求。

3. 直观对比总结

特性防抖 (Debounce)节流 (Throttle)
核心思想只要你一直触发,我就一直不执行。只看最后一次无论你触发多快,我都按固定频率执行。细水长流
触发点事件停止触发一段时间后执行。事件触发期间,每隔一段时间执行一次。
主要目的减少由于连续触发带来的不必要执行。均匀分布执行过滤,控制流量。

4. 简易代码实现 (JavaScript)

防抖函数
functiondebounce(fn,delay){lettimer=null;returnfunction(...args){if(timer)clearTimeout(timer);// 如果有计时器,直接清除并重新开始timer=setTimeout(()=>{fn.apply(this,args);},delay);};}
节流函数 (时间戳版)
functionthrottle(fn,delay){letlastTime=0;returnfunction(...args){letnow=Date.now();if(now-lastTime>delay){// 只有当前时间与上次执行时间间隔大于 delay 才执行fn.apply(this,args);lastTime=now;}};}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:24:13

测试老鸟经验,性能测试-性能结果分析详情,看这篇就够了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 分析原则&#xf…

作者头像 李华
网站建设 2026/4/16 9:24:07

语言模型在多智能体协作任务中的群体智慧与集体决策优化研究

语言模型在多智能体协作任务中的群体智慧与集体决策优化研究 关键词:语言模型、多智能体协作、群体智慧、集体决策优化、人工智能 摘要:本文聚焦于语言模型在多智能体协作任务中的应用,深入探讨了群体智慧的形成机制以及集体决策优化的方法。首先介绍了研究的背景、目的和相…

作者头像 李华
网站建设 2026/4/16 10:59:05

C++安全编程

比较权威的漏洞统计网站: CWE 官网 https://cwe.mitre.org/index.htmlhttps://cwe.mitre.org/data/definitions/1003.htmlhttps://www.sans.org/top25-software-errors CVE 官网 https://www.cve.org/CVERecord?idCVE-2005-0369 LWG https://cplusplus.github.io/…

作者头像 李华
网站建设 2026/4/16 12:53:15

[服务器应用开发教程]第二节-使用java让服务器忙起来

第一部分:为什么是java?如何在liunx上安装java?最核心的一点:java“一次编写,到处运行” 的理念给予了它极为优异的跨平台性能。Java 支持 Linux、Windows、ARM/x86 等环境,并与 Kubernetes、Docker 无缝集…

作者头像 李华
网站建设 2026/4/16 15:33:43

太缺人了!投了AI应用开发岗,仅3小时,邀约不断!

有人发帖分享自己找工作过程中对市场的感知,并立即调整求职策略,从Java后端开发岗转投AI应用开发岗。 通过验证,ta发现:AI应用开发岗真的缺人,双非学历有机会,并且薪资待遇好。 晚上8点-11点,…

作者头像 李华
网站建设 2026/4/16 11:00:02

36、UNIX系统用户管理与公共关系策略

UNIX系统用户管理与公共关系策略 在UNIX系统管理中,用户管理和公共关系是至关重要的两个方面。良好的用户管理能够确保新用户顺利融入系统环境,高效开展工作;而有效的公共关系则有助于提升用户满意度,增强用户对系统管理员的信任。下面我们将详细探讨这两个方面的具体内容…

作者头像 李华