javascript 防抖、节流的用法

news/2024/4/20 15:31:29/文章来源:https://blog.csdn.net/Cwd_wade/article/details/130337349

防抖(Debounce)和节流(Throttle)是两种常见的前端性能优化技术,用于限制事件处理函数的执行频率,从而减少浏览器的计算负担,提升页面性能。

一、防抖

防抖的原理是在事件触发后,等待一段时间(比如100毫秒),如果在这段时间内没有再次触发该事件,那么执行事件处理函数;如果在等待时间内再次触发了该事件,那么重新计时,等待一段时间后再执行事件处理函数。防抖常用于处理一些高频触发的事件,例如窗口大小调整、输入框输入等。

下面是一个简单的防抖函数的示例代码:

/*** @param {function} fn - 需要防抖的函数* @param {number} time - 多长时间执行一次* @param {boolean} flag - 第一次是否执行*/
function debounce(fn, time, flag) {let timer;return function(...args) {// 在 time 时间段内重复执行,会清空之前的定时器,然后重新计时timer && clearTimeout(timer);if (flag && !timer) {// flag 为 true,第一次默认执行fn.apply(this, args);}timer = setTimeout(() => {fn.apply(this, args);}, time);};
}

其中,fn 是需要进行防抖处理的事件处理函数,time 是等待时间,单位毫秒,flag 表示第一次是否执行。这个防抖函数返回了一个新的函数,当事件触发时,新函数会在等待时间内清除之前的计时器,并重新设置计时器,从而实现防抖效果。

二、节流

节流的原理是在一段时间内只执行一次事件处理函数,例如每隔100毫秒执行一次,而不管事件触发了多少次。节流常用于处理一些频繁触发但不需要立即响应的事件,例如滚动事件、鼠标移动事件等。

下面是一个简单的节流函数的示例代码:

/*** @param {function} fn - 需要节流的函数* @param {number} time - 多长时间执行一次* @param {boolean} flag - 第一次是否执行*/
function throttle(fn, time, flag) {let timer;return function(...args) {// flag 控制第一次是否立即执行if (flag) {fn.apply(this, args);// 第一次执行完后,flag 变为 false;否则以后每次都会执行flag = false;}if (!timer) {timer = setTimeout(() => {fn.apply(this, args);// 每次执行完重置timertimer = null}, time);}};
}

其中,fn 是需要进行节流处理的事件处理函数,time 是执行间隔时间,单位毫秒,flag 表示第一次是否执行。这个节流函数返回了一个新的函数,当事件触发时,新函数会在等待时间内判断上一次是否执行过事件处理函数,如果没有,则执行事件处理函数,并重新设置计时器,从而实现节流效果。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自然语言处理基本任务综述

文章目录 1.多语言分词2.词性标注3.命名实体识别4.中心词提取5.依存句法分析6.文本纠错7.文本摘要8.文本相似度9.情感分析10.文本分类11.词向量 1.多语言分词 ​ 在自然语言处理中,分词(Tokenization)是指将自然语言文本中的连续字符序列划分…

VRP开源的算例资源

VRP开源的算例资源 开源的算例资源 开源的MIP算例网址 1. MISOCP网址 Benchmark instances:多种问题的算例数据 TSP算例网址 VRP标杆算例网址 1. Networking and Emerging Optimization发布的VRP算例 2. PRP算例 3. 一个学者的主页上的算例 4. Chair in L…

MySQL-----复合查询

文章目录 前言一、基本查询回顾二、 多表查询解决多表查询的思路 三、自连接四、子查询1. 单行子查询2. 多行子查询3. 多列子查询4. 在from子句中使用子查询5. 合并查询5.1 union5.2 unoin all 总结 前言 前面的学习中,对于mysql表的查询都是对一张表进行查询,在实际开发中这远…

医药之家:19家医药企业获机构调研,8家公司接待超100家

据医药之家了解,4月17日至21日,两市约113家公司接受了机构调研,其中有19家为医药生物公司。从这19家医药生物公司的调研榜单来看,8家公司近5日接待机构家数超100家,分别是长春高新、国际医学、美好医疗、迪瑞医疗、祥生…

【中标通知】塔望咨询中标新疆农发集团 品牌规划建设项目

【新疆农发集团供应链有限公司-品牌建设项目】于2022年5月正式启动。 本次项目2022年4月6日招标结果正式公示。【塔望咨询】凭借3W消费战略方法体系和专注食品行业丰富的品牌项目经验,中标新疆农发集团供应链有限公司兵团红品牌规划建设项目。 中标结果公告 新疆农…

天梯赛 L3-025 那就别担心了

原题链接: PTA | 程序设计类实验辅助教学平台 题目描述: 下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题,其实都不用担心。 博主将这种逻辑推演称为“逻辑自洽”,即从某个命题出发的所有推理路径都会将结…

用java 实现二叉树创建

二叉树是数据结构中的一个重要的概念,二叉树的概念最早由 Linus Torvalds在1958年提出。他给出了一个树形数据结构,可以用来存储二叉树。每个节点的左子树和右子树都是空,中间层是子树。在一个给定的空间中,每一个节点都有两个左右…

相机雷达联合标定cam_lidar_calibration

文章目录 运行环境:1.1 ROS环境配置1)工作空间创建和编译2)官方数据集测试环境 2.1 在线标定1)数据类型2)标定板制作3)配置文件4)开始标定5)完整实现步骤 3.1 python版本选择3.2 rvi…

4年的测试工程师,你遇到过自身瓶颈期吗?又是怎样度过的?

从毕业到现在已经快4年啦,一直软件测试行业混迹。我不是牛人,但是自我感觉还算是个合格的测试工程师,有必要写下自己将近4年来的经历,给自我以提示,给刚入行的朋友提供点参考。 貌似这一点适应的行业最广,…

Java——二叉搜索树的后序遍历序列

题目链接 牛客在线oj题——二叉搜索树的后序遍历序列 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围: 节点数量 0≤n≤1000 …

自习室管理系统的设计与实现(论文+源码)_kaic

摘要 近年来,随着高校规模的逐步扩大,学生对高校自习室座位的需求也在不断增加。然而,一些高校仍然采用人工管理学院自习室座位,这大大降低了管理效率。显然,开发一个成本低、占用资源少、能提高高校自习室座位管理效率…

Junit 5 如何使用 Guice DI

Guice 是一个依赖注入的小清新工具。 相比 Spring 的依赖管理来说,这个工具更加小巧,我们可以在测试中直接使用。 Junit 5 在 Junit 中使用就没有那么方便了,因为 Junit 没有 Guice 的注解。 你需要手动写一个类,在这个类中&a…

ABeam Insight | 智能制造系列(6):虚拟/增强现实(VR/AR)×智能制造

虚拟现实(VR)和增强现实(AR)的概念早在20世纪60年代就被提出,但由于当时的技术水平无法满足相关应用的需求,这些概念并没有引起广泛关注。直到近年来随着计算机技术的飞速发展,虚拟现实和增强现…

nodejs+vue 文旅旅游公司智能管理OA系统

通过本次设计,让我学到了更多的知识,而且在设计中会有一些问题出现,最后通过查阅资料和在老师和同学的帮助下完成了系统的设计和开发,使得这次系统的开发非常的有意义。同时通过这次系统的设计也让我明白了自己在哪方面有不足&…

【PWN刷题__ret2text】[CISCN 2019华北]PWN1

ret2text~ 前言 依旧是简单的ret2text 一、checksec查看 No canary found 没有开启栈溢出保护 二、IDA反汇编 双击进入func() 发现后门函数system("cat/flag");根据语义,函数提供了修改v1,判断v2是否等于11.28125,如…

项目沟通管理5大技巧 第4个很重要

1、充分使用twitter管理沟通模型 项目沟通会议可以充分使用witter的管理沟通模型,提高会议沟通效率。使用此模型,主要是有三步: 第一步:倾听,项目经理需要保持中立的立场,不先表态,让团队成员畅…

SAP ABAP 使用SICF发布HTTP API接口

一、SE24创建类:Z_HCX_HTTP 1、创建类: 2、切换到接口(interface)页签,输入IF_HTTP_EXTENSION ,回车。切换到方法(method)页签,双击IF_HTTP_EXTENSION~HANDLE_REQUEST进…

STM32 产生随机数方式

STM32 产生随机数方式 C语言的stdlib.h库里的srand(unsigned seed)和rand(void)函数,可以配合产生伪随机数。其中srand(seed)产生算法种子,再由rand()通过算法产生随机数,产生的随机数在宏定义RAND_MAX范围内。如果seed不变,则产…

URL 转为QR code(二维码)

推荐一个良心的网站,能够免费地将url、text编码为二维码,而且还能设计logo、颜色等。 https://www.the-qrcode-generator.com/ 如下图: 可以自己定义logo、颜色: 还能查看扫描历史等统计信息: 上述所有功能都是免…

【虚拟仿真】Unity3D打包WEBGL后播放视频(VideoPlayer组件)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 本篇文章实现Unity3D打包WEBGL后播放视频,如下图所…