什么是防抖和节流?有什么区别? 如何实现?

news2024/9/27 9:21:17

防抖(Debounce)节流(Throttle)是两种常用的技术手段,主要用于控制某个函数在一定时间内触发的次数,以减少触发频率,提高性能并避免资源浪费。

防抖(Debounce)的工作原理是,当事件持续触发时,只有在事件停止触发n秒后,才会执行事件函数。如果在n秒内事件被重新触发,那么之前的计时会被重置。这种技术通常用于如模糊搜索、短信验证和文本编辑器实时保存等场景。

节流(Throttle)的工作原理是,当事件持续触发时,每n秒只执行一次函数。如果在n秒内事件被重复触发,那么只有第一次触发的事件会生效。这种技术常用于处理如scroll事件、浏览器播放事件和window的resize等场景。

防抖(Debounce)是指在一定时间内,当函数被频繁触发时,只有在最后一次触发后的延迟时间内,函数才会被真正执行。如果在延迟时间内又有触发事件发生,会重新开始计时。防抖技术常用于搜索框输入、按钮点击等场景,避免短时间内的频繁请求。

以下是一个简单的防抖示例代码:

// 创建一个防抖函数
function debounce(func, delay) {
 let debounceTimer;
 return function () {

   // 清除之前设置的定时器

   clearTimeout(debounceTimer);

   // 设置一个新的定时器,延迟 delay 毫秒后执行 func 函数

   debounceTimer = setTimeout(() => {

     func.apply(this, arguments);

   }, delay);

 }

}// 使用防抖函数
const searchInput = document.getElementById('searchInput');
const debouncedSearch = debounce(() => {

 console.log('执行搜索操作');

}, 500);
searchInput.addEventListener('keyup', debouncedSearch);

在上述示例中,创建了一个名为 debounce 的函数,它接受一个要执行的函数 func 和延迟时间 delay。在调用 debouncedSearch 函数时,会清除之前设置的定时器,并重新设置一个定时器,在延迟时间后执行 func 函数。

节流(Throttle)是指在一定时间内,无论函数被触发多少次,函数只会在固定的时间间隔内执行一次。如果在时间间隔内有多次触发事件,只会执行最后一次。节流技术常用于滚动事件、鼠标移动等场景,限制函数的执行频率。

以下是一个简单的节流示例代码:

// 创建一个节流函数function throttle(func, delay) {

 let canRun = true;

 return function () {

   if (canRun) {

     func.apply(this, arguments);

     canRun = false;

     setTimeout(() => {

       canRun = true;

     }, delay);

   }

 }

}


// 使用节流函数
const scrollEventHandler = throttle(() => {

 console.log('滚动事件触发');

}, 1000);
window.addEventListener('scroll', scrollEventHandler);

在上述示例中,创建了一个名为 throttle 的函数,它同样接受一个要执行的函数 func 和延迟时间 delay。在调用 throttle 函数时,如果 canRun 为 true,则执行 func 函数,并将 canRun 设置为 false。然后,通过设置一个定时器,在延迟时间后将 canRun 设置为 true,以便下一次函数调用。

防抖和节流的主要区别在于:防抖是在最后一次触发后的延迟时间内执行函数,而节流是在固定的时间间隔内执行函数。

选择使用防抖还是节流,取决于具体的业务需求和场景。防抖更适合处理连续的快速触发事件,而节流更适合限制频繁触发事件的执行频率。

希望这个解释对你有所帮助!如果你还有其他问题,请随时提问。

欢迎加入“前端组件开发学习”交流群,一起学习成长!可关注  “前端组件开发” 公众号后,私信后申请入群。

d848d5658a07453c843277846948c608.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1615395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openEuler-23.03下载、安装

一、下载 下载地址:openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本:openEuler-23.03-x86_64-dvd.iso 二、安装 cd /etc/sysconfig/network-scripts/ vi ifcfg-ens-33## 要修改部分 BOOTPROTOstatic## 新增部分 IPADDR192.168.1.128 …

AI觉醒派: 探索与AI协作路径,觉醒更强大的自己

AI觉醒派成立以来,微信社群已经壮大至几千人。许多新加入的小伙伴可能对我们还不够了解,今天,让我们通过这篇文章深入探讨我们的核心理念、梦想、以及如何借助人工智能觉醒更强大的自我。 🌟 AI觉醒派简介 AI觉醒派是一个探索人工…

深度学习入门(4)

神经网络的构建 import numpy as np import matplotlib.pyplot as plt def sigmoid(x):return 1/(1np.exp(-x)) def identity_function(x):#恒等函数return x def init_network():#进行权重和偏置的初始化,并保存到字典中network{}network[W1]np.array([[0.1,0.3,0…

清华大学:序列推荐模型稳定性飙升,STDP框架惊艳登场

获取本文论文原文PDF,请公众号留言:论文解读 引言:在线平台推荐系统的挑战与机遇 在线平台已成为我们日常生活中不可或缺的一部分,它们提供了丰富多样的商品和服务。然而,如何为用户推荐感兴趣的项目仍然是一个挑战。…

sql(ctfhub)

一.整数型注入 输入1 输入2 输入2-1,回显为1的结果,说明是数字型,只有数字型才可加减 判断字段数为2 查询数据库 查表 查列 显示flag内容 二.字符型注入 输入1 输入2 输入2-1,说明为字符型,不是数字型 判断闭合方式为…

新手小白,在数学建模的过程中应该怎么分工?

大家知道,数学建模竞赛是需要一个团队的三个人在三天或四天的时间内,完成模型建立,编程实现和论文写作的任务,对许多第一次参加建模或者建模经验比较欠缺的团队来说,是时间紧任务重的,那么怎么办呢&#xf…

Elasticsearch:简化 KNN 搜索

作者:来自 Elastic Panagiotis Bailis 在这篇博客文章中,我们将深入探讨我们为了使 KNN 搜索的入门体验变得更加简单而做出的努力! 向量搜索 向量搜索通过在 Elasticsearch 中引入一种新的专有的 KNN 搜索类型,已经可以使用一段…

对接浦发银行支付(八)-- 对账接口

一、背景 本文不是要讲述支付服务的对账模块具体怎么做,仅是介绍如何对接浦发银行的对账接口。 也就是说,本文限读取到对账文件的内容,不会进一步去讲述如何与支付平台进行对账。 如果要获取商户的对账单,需要遵循以下步骤&…

数据分析_数据分析思维(1)

数据分析_数据分析思维(1) 这篇文章具体的给大家介绍数据分析中最为核心的技术之一: 数据分析思维的相关内容。 一、数据分析的三种核心思维 作为新手数据分析师或数据运营, 在面对数据异常的时候, 好多小伙伴都会出现: “好像是A引起的”, “好像也和B渠道有关”, “也可能…

江苏瑞达环保科技股份有限公司| 邀您参加2024全国水科技大会暨技术装备成果展览会

—— 展位号:A18 —— 江苏瑞达环保科技股份有限公司是一家致力于环境保护和可持续发展的高新技术企业,专注于环境治理技术研发和环保节能装备制造,为工业企业提供可靠的工程解决方案。2023年,瑞达科技被认定为江苏省省级专精特新企业。 瑞达科技成立于2…

rCore-Turorial-Book第三课(计算机启动流程和程序内存布局与编译流程探索)

本节任务:梳理程序在操作系统中被编译运行的全流程,大体了解我们在没有操作系统的情况下,我们会面对那些困难 重点 1. 计算机组成基础 面对的困难:没有操作系统,我们必须直面硬件资源,管理起他们并为应用程…

本地环境通过ssh通道连接服务器数据库,实现本地客户端和代码可以访问数据库

使用方法: ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 搭建隧道的账号搭建隧道的ip 可以增加参数-v,输出更多的信息 ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 -v 搭建隧道的账号搭建隧道的ip 有时候,测试环境的数据库不允许…

YOLOv8-PySide --- 基于 ultralytics 8.1.0 发行版优化 | 代码已开源

YOLOv8-PySide — 基于 ultralytics 8.1.0 发行版优化 Github 项目地址:https://github.com/WangQvQ/Ultralytics-PySide6 BiliBili视频地址:https://www.bilibili.com/video 页面效果 如何使用 pip install ultralytics8.1.0 or git clone --branch v…

如何判别三角形和求10 个整数中最大值?

分享每日小题,不断进步,今天的你也要加油哦!接下来请看题------> 一、已知三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形 …

通过Docker新建并使用MySQL数据库

1. 安装Docker 确保您的系统上已经安装了Docker。可以通过以下命令检查Docker是否安装并运行: systemctl status docker如果没有安装或运行,请按照官方文档进行安装和启动。 2. 拉取MySQL镜像 从Docker Hub拉取MySQL官方镜像。这里以MySQL 5.7版本为…

(回溯)记忆化搜索和dp

动态规划的核心就是 状态的定义和状态的转移 灵神 的 回溯改递归思路 首先很多动态规划问题都可以采用 回溯 的思想 回溯主要思想就是把 一个大问题分解成小问题 比如 采用子集类回溯问题中的核心思想-> 选或不选 或者 选哪个 记忆化搜索之后 我们可以发现 每个新节点依…

【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)

目录 UDP协议 UDP协议的报文结构及注意事项 UDP报文结构中的校验和字段 1. 校验和主要校验的内容 2. UDP校验和的实现方式 3. CRC(循环冗余校验)算法 4. MD5(Message Digest Algorithm 5) UDP协议 上一篇文章提过&#xf…

【C++】双指针算法:复写零

1.题目 别看这是一道简单题,它的通过率低于一些中等甚至困难的题目! 大大增加这道题目难度的是最后一句话:1.不可越界写入。2.就地修改。 如果可以再创建一个数组的话,那么这道题目就会非常简单,但这道题目必须要求在…

汽车IVI中控开发入门及进阶(十六):carplay认证

现在有些中控采用高通的芯片如8155、8295等,实现多屏互动等,但是也有一些车型走低成本方案,比如能够实现HiCar、CarLife或者苹果Apple的Carplay等能进行手机投屏就好了。 能实现CarPlay功能通过Carplay认证,也就成了一些必须的过程,国产车规级中控芯片里,开阳有一款ARK1…

AI视频分析技术的常用开源模型及TSINGSEE青犀AI视频识别分析能力介绍

AI视频分析技术是指利用人工智能技术来对视频数据进行分析和处理的技术。开源模型是指可以免费获取和使用的代码模型,可以帮助开发人员快速构建和部署AI视频分析应用程序。 以下是一些业内常用的用于AI视频分析技术的开源模型: OpenCV:Open…