当前位置: 首页 > news >正文

防抖(Debounce)和节流(Throttle)的区别和应用场景

防抖(Debounce)和节流(Throttle)虽然都是用来限制函数的执行频率,但它们的实现方式和应用场景有所不同。以下是两者的主要区别:

1. 执行原理

  • 防抖(Debounce)

    • 执行条件:在指定的延迟时间内,如果函数再次被触发,计时器会重新计时,直到延迟时间结束且没有新的触发时,函数才会执行。
    • 效果:确保函数在一段时间内只会执行一次,并且是事件触发后的最后一次。适用于希望在一连串事件结束后执行某个操作的场景。
  • 节流(Throttle)

    • 执行条件:在指定的时间间隔内,函数只会执行一次,无论该时间间隔内事件被触发了多少次。
    • 效果:确保函数在一定时间内最多执行一次。适用于控制持续触发事件的执行频率,防止函数执行过于频繁。

2. 使用场景

  • 防抖(Debounce)

    • 适用于需要在一段时间内等到所有触发事件都完成后再执行函数的场景。
    • 典型应用:搜索框自动补全、窗口大小调整(resize)、表单输入验证。
    • 示例:用户停止输入后的搜索请求发送。
  • 节流(Throttle)

    • 适用于需要定期执行某个函数,而不是立即执行的场景。
    • 典型应用:滚动事件(scroll)、页面滚动加载、按钮重复点击。
    • 示例:限制滚动事件的触发频率。

3. 代码对比

  • 防抖

    • 每次事件触发都会重置计时器,只有在延迟时间结束后且没有新事件触发,函数才会执行一次。
    function debounce(func, delay) {let timer;return function (...args) {clearTimeout(timer);timer = setTimeout(() => {func.apply(this, args);}, delay);};
    }
    
  • 节流

    • 在设定的时间间隔内,函数只能执行一次。即使多次触发,函数也不会立即执行,而是在规定的时间间隔后执行一次。
    function throttle(func, limit) {let lastFunc;let lastRan;return function (...args) {const context = this;if (!lastRan) {func.apply(context, args);lastRan = Date.now();} else {clearTimeout(lastFunc);lastFunc = setTimeout(() => {if ((Date.now() - lastRan) >= limit) {func.apply(context, args);lastRan = Date.now();}}, limit - (Date.now() - lastRan));}};
    }
    

总结

  • 防抖关注的是在一连串事件结束后执行一次(等待时间内如果有新事件触发就重新计时),强调“最后一次执行”。
  • 节流关注的是在指定时间间隔内执行一次(无论期间有多少次触发),强调“定期执行”。

根据实际需求选择合适的技术,可以有效提升应用的响应速度和用户体验。

相关文章:

防抖(Debounce)和节流(Throttle)的区别和应用场景

防抖(Debounce)和节流(Throttle)虽然都是用来限制函数的执行频率,但它们的实现方式和应用场景有所不同。以下是两者的主要区别: 1. 执行原理 防抖(Debounce): 执行条件&a…...

前端 Code Review 常见问题

在前端开发中,代码审查(Code Review)是一个至关重要的步骤。它不仅可以帮助团队成员之间共享知识和经验,还可以提高代码质量,减少错误和安全漏洞。以下是一些常见的前端 Code Review 问题和相应的解决方案。 1. 不一致…...

Python监控AWS ECS集群和服务的CPU和内存利用率

在电子商务或其他行业,重要节日通常会带来大量的流量和订单,这对应用程序的资源利用率提出了更高的要求。为了确保应用程序在节日期间能够顺利运行,提前监控和优化资源利用率至关重要。 在本文中,我们将介绍如何使用Python编写一个脚本,从AWS CloudWatch中获取ECS集群和服务的…...

淘宝天猫API接口深度解析:如何高效利用商品详情与关键词搜索商品列表功能

在电子商务的浩瀚海洋中,淘宝和天猫作为两大巨头,其平台上的商品信息无疑是商家和消费者关注的焦点。为了更高效地获取这些信息,淘宝天猫开放平台提供了丰富的API接口,其中商品详情接口和关键词搜索商品列表接口尤为关键。本文将深…...

python快速接入阿里云百炼大模型

1.注册阿里云账号 访问阿里云官网,完成账号注册流程,并开通百炼服务,网址:https://bailian.console.aliyun.com 2.获取 API Key 登录阿里云百炼平台,在个人中心或相关设置页面找到并生成 API Key,妥善保管此…...

基于AI对话生成剧情AVG游戏

游戏开发这个领域,一直有较高的学习门槛。作为一个非专业的游戏爱好者,如果想要开发游戏,往往受制于游戏引擎的专业程度,难以完成复杂的游戏项目。 AI IDE的诞生,提供了另外的一种思路,即通过AI 生成项目及…...

[flutter] 安卓编译配置

Maven 镜像 android/build.gradle buildscript {ext.kotlin_version 1.7.10repositories {google() // mavenCentral()maven { url https://maven.aliyun.com/repository/google }maven { url https://maven.aliyun.com/repository/jcenter }maven { url https://mav…...

使用ENSP实现NAT(2)

一、NAT的类型 二、静态NAT 1.项目拓扑 2.项目实现 路由器AR1配置: 进入系统视图 sys将路由器命名为AR1 sysname AR1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为192.168.10.254/24 ip address 192.168.10.254 24进…...

解决小程序中ios可以正常滚动,而Android失效问题

解决小程序中 iOS 可以正常滚动,而 Android 失效问题 在开发小程序时,我们经常会遇到一些平台兼容性问题。最近,我在开发一个小程序时遇到了一个问题:在 iOS 设备上可以正常滚动加载更多数据,而在 Android 设备上却无…...

docker安装部署

1.Docker简介 Docker是一个开源的容器引擎,开发者可以打包应用以及相关依赖包到一个可移植的容器中,发布到任何流行的Linux机器上。容器是完全使用沙箱机制,相互之间不会有任何接口,而且更轻量级。 1.1 概念 docker会自动搜索并下载应用镜像,镜像不仅包含应用本身,还包含…...

百度23届秋招研发岗A卷

百度23届秋招研发岗A卷 2024/12/16 1.下面关于 SparkSQL 中 Catalyst 优化器的说法正确的是(ABC) A.Catalyst 优化器利用高级编程语言功能(例如 Scala 的模式匹配)来构建可扩展的查询优化器 B.Catalyst 包含树和操作树的规则集…...

metrics.roc_curve函数介绍

目录 函数介绍使用方法 函数介绍 metrics.roc_curve 是 scikit-learn 中的一个函数,用于计算接收者操作特征曲线(Receiver Operating Characteristic, ROC)曲线的参数。 具体来说,metrics.roc_curve 函数接受真实的标签和预测标…...

stm32进硬件错误怎么回事

STM32进入硬件错误状态,通常是由一些特定的编程或硬件问题引起的。以下是一些可能的原因及相应的解决方法: 可能的原因 数组越界操作:在编程过程中,如果数组访问超出了其定义的边界,可能会导致内存访问错误&#xff0…...

【网络安全】掌握 Active Directory 攻防审计实操知识点

掌握 Active Directory 攻防审计实操知识点 在深入了解 Active Directory 之前,我们需要先掌握网络基础设施的映射和资源访问管理方式。这一切通常通过目录服务 (Directory Services) 实现,目录服务在组织内提供网络资源的映射和访问。轻量目录访问协议…...

vscode不同项目使用不同插件

转载请注明出处:小帆的帆的博客 在使用vscode开发不同项目时可能会用到不同的插件。手动管理不够优雅,本文介绍使用Profiles的方式的来管理不同项目的插件。 手动管理不同项目的插件 本来vscode安装了有三个插件 这时需要新建一个项目,新…...

oracle存储过程中遇到的各种问题及解决方案集锦

oracle存储过程中遇到的各种问题及解决方案集锦 1、在oracle数据库中,为了存储过程和数据表的关键字不冲突,数据表的别名不能加AS: select a.appname from appinfo a; --正确 select a.appname from appinfo as a; --错误2、在存储过程中&am…...

PHP+MySQL 学生信息管理系统

目录 MySQL建表指令 主页面展示 主页面源代码如下 增:添加学生信息 添加html如下 html:主要用于显示网页内容 成功添加后回显 ​编辑 增加php如下 删:删除学生信息 删除html如下 成功删除后回显 删除php如下 改:修改学生信息 修改html如下 修改php如下 查:查…...

数据结构-栈与队列

栈:一对一的线性储存结构,先进后出,只允许从一端进行数据的插入与删除的线性数据结构。用于,判断成对出现的东西,如判断回文字符串或者回文数,四则混合运算求值等。 顺序栈(数组)&a…...

c#上班,上学,交通方式接口

using System;namespace INTERFACE {abstract class Person{public string Name { get; set; }public int Age { get; set; }public virtual void ShowInfo(){Console.WriteLine($"Name: {Name}, Age: {Age}");}}// 接口 IWorkinterface IWork{void GotoCompany();}/…...

吴恩达官宣开源,yyds!

最近,GitHub 上又一个开源项目火成了一匹黑马。 开源才短短十几天,star 标星就从 0 飙升到了 8000,可以说是最近看到的涨 star 极其生猛的开源项目之一了。 出于好奇,我也点进去看了看。 好家伙,一看这昵称和头像&am…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

DAY 26 函数专题1

函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...