前端防抖和节流函数的实现原理

news/2024/9/19 4:47:08/ 标签: 前端

前端开发中,防抖(Debounce)和节流(Throttle)是两种常用的优化技术,它们主要用于减少事件处理函数的执行频率,从而提高程序性能和用户体验。

防抖(Debounce)

防抖的目的是确保一个操作在一段时间内只被执行一次。例如,当用户在一个输入框中快速连续输入文字时,我们可能希望只在用户停止输入之后的一小段时间后再去执行查询操作,以避免频繁触发不必要的API调用。

实现原理:
  1. 设置定时器:每次触发事件时,取消前一个定时器,并设置一个新的定时器。
  2. 定时器到期:如果在这段时间内没有再触发事件,则执行回调函数。
  3. 延迟执行:只有在最后一次事件发生后的指定时间内没有再次触发事件,才会执行一次回调。
示例代码:
function debounce(func, wait) {let timeout;return function() {const context = this;const args = arguments;clearTimeout(timeout);timeout = setTimeout(function() {func.apply(context, args);}, wait);};
}

节流(Throttle)

节流是为了限制一个操作的执行频率,使得无论触发事件多少次,在规定的时间间隔内,该操作只能执行一次。这在处理滚动事件、窗口大小变化等高频事件时特别有用。

实现原理:
  1. 设置标志位:标记是否可以执行回调函数。
  2. 执行并锁定:当回调函数执行时,设置标志位为不可执行状态。
  3. 解锁:在规定的时间间隔之后,重新允许回调函数的执行。
示例代码:
function throttle(func, limit) {let inThrottle;return function() {const args = arguments;const context = this;if (!inThrottle) {func.apply(context, args);inThrottle = true;setTimeout(() => inThrottle = false, limit);}};
}

总结

  • 防抖适用于那些不需要立即反应的操作,它可以保证在一段时间内只执行一次操作。
  • 节流则保证了一个操作不会在短时间内被频繁执行,适合需要连续响应的情况。

这两种方法都有助于提高应用的性能,减少不必要的计算和网络请求,改善用户体验。根据具体的应用场景选择合适的策略来优化代码。


http://www.ppmy.cn/news/1520824.html

相关文章

iomuxc、pinctrl子系统、gpio子系统(学习总结)

iomuxc、pinctrl子系统、gpio子系统三者的关系 相互依赖:IOMUXC、pinctrl子系统和gpio子系统在功能上相互依赖。IOMUXC提供了引脚复用和电气属性的配置能力,pinctrl子系统负责从设备树中获取这些配置信息并完成初始化,而gpio子系统则在引脚被…

UE 【材质编辑】自定义材质节点

使用UE的材质编辑器,蓝图提供了大量的节点函数: 实际上,这是一段封装好的包含一串HLSL代码的容器。打开“Source/Runtime/Engine/Classes/Material”,可以看到很多不同节点的头文件: 照葫芦画瓢 以UMaterialExpressi…

notepad++将换行替换成空

将多行里的换行置为一行,例如将下面的6行置为3行 crrlH打开替换框, 替换目标为【,\r\n】,替换成空,勾选循环查找和 正则表达式,全部替换即可。 替换后的效果

应该怎么从0搭建一个图像识别系统,如果想考计算机的研究生应该如何准备

搭建一个图像识别系统的过程可以分为以下几个步骤: 数据收集和准备:收集包含标注的图像数据集,并将其准备为训练集和测试集。确保数据集的多样性和代表性。 特征提取和选择:选择适当的特征提取方法,如卷积神经网络&am…

如何配置iSAID_Devkit环境

这个库有点年头了,使用README.md里的conda env create -f environment.yml会说包之间有冲突, 没法安装. 解决方法: 自己建立一个conda env, conda create -n py_isaid pip python3.6.8 记得自己提前定好python版本use gpt to transform environment.yml to setup.p…

mac安装spark

参考:在Mac上安装Spark apache-spark-3.5.1_mac安装spark-CSDN博客 几个需要用到的路径: hadoop的bin目录:/opt/homebrew/Cellar/hadoop/3.4.0/bin spark的conf目录/opt/homebrew/Cellar/apache-spark/3.5.2/libexec/conf spark的bin目录&am…

Elasticsearch之原理详解

简介 ES是使用 Java 编写的一种开源搜索引擎,它在内部使用 Lucene 做索引与搜索,通过对 Lucene 的封装,隐藏了 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API 然而,Elasticsearch 不仅仅是 Lucene&#…

SpringCloud Alibaba】(十三)学习 RocketMQ 消息队列

目录 1、MQ 使用场景与选型对比1.1、MQ 的使用场景1.2、引入 MQ 后的注意事项1.3、MQ 选型对比 2、下载、安装 RocketMQ 及 RocketMQ 控制台2.1、下载安装 RocketMQ2.2、测试 RocketMQ 环境2.3、RocketMQ 控制台【图形化管理控制台】2.3.1、下载、安装2.3.2、验证 RocketMQ 控制…

day-49 使数组中所有元素相等的最小操作数

思路 第一个数和最后一个数要变为一致,需要操作n-1次,然后第二个数和倒数第二个数要操作n-3次 解题过程 以此类推即可得出答案 Code class Solution {public int minOperations(int n) {int ans0;int t(n-1);while(t>0){anst;t-2;}return ans;} }作…

String核心设计模式——建造者模式

目录 建造者模式 优点 缺点 使用场景 结构 步骤 1 Item.java Packing.java 步骤 2 Wrapper.java Bottle.java 步骤 3 Burger.java ColdDrink.java 步骤 4 VegBurger.java ChickenBurger.java Coke.java Pepsi.java 步骤 5 Meal.java 步骤 6 MealBuilder…

Proteus 仿真设计:开启电子工程创新之门

摘要: 本文详细介绍了 Proteus 仿真软件在电子工程领域的广泛应用。从 Proteus 的功能特点、安装与使用方法入手,深入探讨了其在电路设计、单片机系统仿真、PCB 设计等方面的强大优势。通过具体的案例分析,展示了如何利用 Proteus 进行高效的…

CSP-CCF ★201512-2 消除类游戏★

一、问题描述 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当…

Spring的核心设计模式——工厂模式

目录 工厂模式 工厂模式的类型 优点 缺点 使用场景 结构 实现 步骤 1 步骤 2 步骤 3 步骤 4 步骤 5 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的…

Scratch教师节:给老师的一封信

小虎鲸Scratch资源站-免费Scratch作品源码,素材,教程分享平台! 【Scratch教师节特别献礼】—— 给老师的一封信:编程之光,照亮梦想之路 在这个金秋送爽、硕果累累的季节里,我们迎来了一个特别而温馨的日子——教师节。在这个充满感激与敬意的…

无人机纪录片航拍认知

写在前面 博文内容为纪录片航拍简单认知:纪录片 航拍镜头,航拍流程,航拍环境条件注意事项介绍航拍学习书籍推荐《无人机商业航拍教程》读书笔记整理,适合小白认知理解不足小伙伴帮忙指正 😃,生活加油 99%的焦虑都来自于…

使用模板:封装栈、队列

栈 #include <iostream>using namespace std;//封装栈 template<typename T> class myStack { private:T *data;int top-1; //记录栈顶元素下标int size; //栈的大小 public:myStack():size(10){data new T[size];top-1;}myStack(int size){data…

Axure RP实战:打造高效文字点选验证码

Axure RP实战&#xff1a;打造高效文字点选验证码 前言 在数字时代&#xff0c;网络安全和用户体验是设计在线表单时的两大关键考量。 验证码作为一种验证用户身份的技术&#xff0c;已经从简单的数字和字母组合&#xff0c;发展到了更为复杂和用户友好的形式。 今天&#…

实用的4大网站建设模板资源网站

WP模板牛 (wpniu.com ) WP模板牛是一个综合性的WordPress建站模板分享网站&#xff0c;提供中文WP模板、外贸WP模板、免费WP模板等100多个WordPress模板。使用这些模板可以快速搭建起属于自己的WordPress网站。 模板之家 (mymoban.com ) 模板之家是一个提供各种网站模板资源…

设计者模式之访问者模式

1.访问者模式概述 允许你在不改变对象结构中的元素类的前提下&#xff0c;向对象结构中的元素增加新的行为。这种模式将数据结构与作用于结构上的操作分离&#xff0c;从而使得我们可以独立地改变数据结构和操作。 2.访问者模式的组成部分 1&#xff09;Visitor&#xff08;访…

【C++】STL—vector的使用

目录 前言vector的常见构造迭代器的使用vector空间增长问题vector的增删查改尾插和尾删findinsert和erase 前言 vector是表示可变大小数组的序列容器。它就像数组一样&#xff0c;采用连续的存储空间来存储元素&#xff0c;且它的大小可以动态改变。并且vector在访问元素时也非…