函数节流:防抖与节流实现方案

夜辰吖_9926

夜辰吖_9926

2025-11-20

599人浏览

原创

函数防抖与节流均可优化高频事件性能;防抖通过延迟执行并重置定时器,确保连续触发时只执行最后一次或首次;节流则通过时间戳或定时器控制函数固定频率执行,保证周期性响应;两者分别适用于搜索输入、按钮点击与滚动监听、窗口缩放等场景。

函数节流:防抖与节流实现方案

在处理高频触发事件时,比如窗口滚动、调整大小或输入框输入,直接执行回调会导致性能问题。函数节流和防抖是两种常用的优化手段,控制函数执行频率,提升页面响应速度与用户体验。

函数防抖(Debounce)

防抖的思路是:当事件被触发后,延迟一段时间执行回调,如果在这段时间内再次触发该事件,则重新计时。

适用于搜索建议、按钮重复点击等场景,只关心“最后一次操作”。

实现方式:
  • 使用 setTimeout 缓存定时器
  • 每次触发时清除旧定时器,重新设置
  • 延迟结束后执行目标函数

基础防抖实现:

function debounce(func, wait) {
  let timeout;
  return function(...args) {
    const context = this;
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(context, args), wait);
  };
}

若需立即执行首次调用(leading edge),可加入 immediate 参数控制:

function debounce(func, wait, immediate) {
  let timeout;
  return function(...args) {
    const context = this;
    const callNow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(() => {
      timeout = null;
      if (!immediate) func.apply(context, args);
    }, wait);
    if (callNow) func.apply(context, args);
  };
}

函数节流(Throttle)

节流的逻辑是:规定一个单位时间,在这个时间内最多只执行一次函数。无论触发多少次,都按固定节奏执行。

适合用于 scroll、resize、mousemove 等持续触发但只需周期性响应的场景。

Knowledge Base Manager
Knowledge Base Manager

管理与维护共享的Obsidian知识库,组织文件、执行任务审查、归档,确保知识内容更新且相互关联。

下载
实现方式:
  • 记录上一次函数执行的时间戳
  • 每次触发时判断当前时间是否超过设定间隔
  • 满足条件则执行并更新时间戳

基于时间戳的节流实现:

function throttle(func, wait) {
  let previous = 0;
  return function(...args) {
    const now = Date.now();
    const context = this;
    if (now - previous > wait) {
      func.apply(context, args);
      previous = now;
    }
  };
}

也可以使用定时器方式实现,更灵活地控制首尾执行时机:

function throttle(func, wait) {
  let timeout;
  return function(...args) {
    const context = this;
    if (!timeout) {
      timeout = setTimeout(() => {
        func.apply(context, args);
        timeout = null;
      }, wait);
    }
  };
}

防抖与节流的核心区别

理解两者差异有助于正确选择使用场景:

  • 防抖:频繁触发下只执行最后一次(或第一次),中间的都被取消
  • 节流:保证在指定时间间隔内至少执行一次,形成稳定频率

举个例子:用户连续快速滚动页面

  • 用防抖,可能在整个滚动结束才执行一次处理
  • 用节流,每100ms执行一次,能及时响应又不至于太频繁

基本上就这些,根据业务需求选择合适方案即可。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

edge

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.21

3182

5

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.05

3114

4

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

2025.04.24

3452

6

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

569

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1698

6

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

2478

7

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.04

3740

5

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

2023.10.07

614

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习