说说防抖节流

简介: 说说防抖节流

前言

       当我们在网页开发中遇到一些频繁触发的事件,比如窗口滚动、输入框输入等,为了减少事件处理程序的执行次数,提高性能和用户体验,我们可以使用防抖和节流的技术。

防抖节流概念即应用场景

       防抖和节流都是通过控制事件处理程序的执行频率来达到优化的目的,但它们的实现方式和应用场景有所不同。

防抖概念:防抖(Debounce)的原理是在事件触发后,等待一段时间(比如200毫秒),如果在这段时间内没有再次触发事件,才执行事件处理程序。如果在等待时间内又触发了事件,则重新开始计时。这样可以避免事件处理程序被频繁执行,只在事件停止触发后执行一次。

举例代码说明

function debounce(func, delay) {
  let timer;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(func, delay);
  };
}
// 使用防抖技术处理窗口滚动事件
window.addEventListener('scroll', debounce(function() {
  console.log('窗口滚动事件被触发了');
}, 200));

在上述代码中,我们定义了一个debounce函数,它接受两个参数:func是要执行的事件处理程序,delay是等待的时间间隔。在debounce函数内部,我们使用了一个timer变量来保存定时器的引用。每次事件触发时,我们先清除之前的定时器,然后重新设置一个新的定时器,等待一段时间后执行事件处理程序。

场景:

       在使用防抖技术处理窗口滚动事件时,我们通过addEventListener方法将防抖函数作为事件处理程序传入。这样,当窗口滚动事件被触发时,防抖函数会延迟执行事件处理程序,只有在停止滚动后的200毫秒内没有再次触发事件,才会执行事件处理程序。

节流概念:

       节流(Throttle)的原理是在一定时间间隔内只执行一次事件处理程序。比如设置一个间隔时间为200毫秒,当事件触发后,立即执行事件处理程序,并在200毫秒内禁止再次触发事件。这样可以控制事件处理程序的执行频率,避免过于频繁的执行。

下面举例代码说明

       

function throttle(func, delay) {
  let timer;
  return function() {
    if (!timer) {
      func();
      timer = setTimeout(function() {
        timer = null;
      }, delay);
    }
  };
}
// 使用节流技术处理窗口滚动事件
window.addEventListener('scroll', throttle(function() {
  console.log('窗口滚动事件被触发了');
}, 200));

在上述代码中,我们定义了一个throttle函数,它接受两个参数:func是要执行的事件处理程序,delay是时间间隔。在throttle函数内部,我们使用了一个timer变量来保存定时器的引用。每次事件触发时,我们先判断是否存在定时器,如果不存在,则立即执行事件处理程序,并设置一个新的定时器,在指定的时间间隔后将定时器置为null。

应用场景:

       在上述代码中,我们定义了一个throttle函数,它接受两个参数:func是要执行的事件处理程序,delay是时间间隔。在throttle函数内部,我们使用了一个timer变量来保存定时器的引用。每次事件触发时,我们先判断是否存在定时器,如果不存在,则立即执行事件处理程序,并设置一个新的定时器,在指定的时间间隔后将定时器置为null。

结论:通过使用防抖和节流技术,我们可以有效地控制事件处理程序的执行频率,提高性能和用户体验。在实际开发中,我们可以根据具体的场景和需求选择合适的技术来优化事件处理。

希望这篇文章能帮助到大家

相关文章
|
10天前
|
人工智能 JSON 自然语言处理
让教学更智慧:用阿里云百炼工作流,自动生成中小学教材内容#小有可为#有温度的AI
通过可视化工作流编排,将大模型推理能力转化为标准化的教学内容生成引擎。教师只需输入教材标题和适用学段,即可自动获得结构完整、符合课程标准的章节内容,大幅降低备课门槛,助力教育资源均衡化。
488 126
|
20天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)
|
5天前
|
人工智能 缓存 安全
Claude Code 封号真实原因曝光,这次彻底不装了,直接针对国内开发者的账号下手?
Claude Code 封号潮背后:逆向扒出客户端隐写区域标记,Anthropic 政策收紧叠加 DeepSeek 7 月涨价,国产替代更紧迫。
|
6天前
|
人工智能 安全 Cloud Native
Higress 新发布:AI Gateway 能力增强,Gateway API 及其推理扩展持续打磨
增强 AI 网关能力,持续打磨 Gateway API 及其推理扩展。
352 124
|
6天前
|
人工智能 安全 程序员
终于,Claude Code 封号的原因被曝光了!竟然针对中国用户,植入隐形代码?!
通俗易懂地揭秘 Claude Code 封号的手段,分享一些自己对 AI 编程困境的思考,Codex、Cursor、DeepSeek、智谱 GLM、甚至是豆包,都有所行动了
370 1
|
15天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
860 5
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
12天前
|
人工智能 定位技术 SEO
我学 GEO 第 15 天:终于知道AI GEO该如何做?
我是暴走的莉莉酱,边旅行边研究AI GEO的数字游民。专注普通人如何提升“AI可见度”——让AI在回答用户问题时准确识别、理解并推荐你。不讲玄学,只做可测、可调、可持续的GEO实践。
470 127