前端必备-防抖节流

前端必备技巧:优化性能的防抖和节流 防抖和节流是前端开发中常用的性能优化技巧,能够有效地控制事件处理函数的执行频率,避免不必要的计算和操作,提升页面性能和响应速度。防抖是指在事件被频繁触发时,只执行一次事件处理函数,并且在指定的时间间隔内没有再次触发事件时,才会执行下一次事件处理函数。节流是指在事件被频繁触发时,限制事件处理函数的执行频率,确保一定时间间隔内只执行一次事件处理函数。在返回的函数中,通过记录上次执行事件处理函数的时间 (当事件触发时,如果距离上次执行事件处理函数的时间小于指定的时间间隔(是需要执行的事件处理函数, 阅读详情

前端必备-防抖节流

防抖节流—优化思想
在这里插入图片描述
js中有一个工具:lodash 实现了防抖节流
防抖:debounce 、节流:throttle

函数防抖

原理:当持续触发一个事件时,在n秒内,事件没有再次触发,此时才会执行回调;如果n秒内,又触发了事件,就重新计时。

适用场景:

  • search远程搜索框:防止用户不断输入过程中,不断请求资源,n秒内只发送1次,用防抖来节约资源
  • 按钮提交场景,比如点赞,表单提交等,防止多次提交
  • 监听resize触发时, 不断的调整浏览器窗口大小会不断触发resize,使用防抖可以让其只执行一次

辅助理解:在你坐电梯时,当一直有人进电梯(连续触发),电梯门不会关闭,在一定时间间隔内没有人进入(停止连续触发)才会关闭。

函数节流

原理:当频繁的触发一个事件,每隔一段时间, 只会执行一次事件。
适用场景:

  • 拖拽场景:固定时间内只执行一次, 防止高频率的的触发位置变动
  • 监听滚动事件:实现触底加载更多功能
  • 屏幕尺寸变化时, 页面内容随之变动,执行相应的逻辑
  • 射击游戏中的mousedown、keydown时间
<html>
<head>
	<title>防抖和节流</title>
	<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
</head>
<body>
	<input id="search" type="text" />
	<div id="content" style="height:150px;line-height:150px;text-align:center;color:white;background-color:#333;"></div>
	
	<script>
		//let search = document.getElementById("search");
		//let content = document.getElementById("content");
		
		//let num = 1;
		//function count(){
		//	console.log("发送数据请求。。。");
		//	content.innerHTML = num++;
		//}
		//search.onkeyup = _.debounce(count,2000); //防抖(再次输入则重新计算 取消定时器)  复杂数据转换-递归
		//search.onkeyup = _.throttle(count,2000); //节流(固定时间发送,不会重新计算)


		//若改造一下代码
		var obj = {
			num:1,
			count:function(n){
				console.log("发送数据请求。。。",n);
				content.innerHTML = this.num++;
			}
		}

		//自己手写代码  //防抖
		function debounce(fn,time,num){  
			let timeout;
			return function(){
				if(timeout) clearTimeout(timeout)
				timeout = setTimeout(()=>{
					fn.apply(obj,[num])  //第一个参数 作用域
					//call(obj,num)
					//fn()  //this指向为windows
				},time)
			}
		}
		search.onkeyup = debounce(obj.count,2000,10);

		//节流
		function throttle(fn,time){  
			let timeout; //第一次 undefined-false
			return function(){
				//if(timeout==undefined || timeout==""){
				if(!timeout){  //自动类型转换
					timeout = setTimeout(()=>{  //setTimeout 延迟执行
						//先清除之前的任务
						timeout = undefined;
						//调用函数
						fn.apply(obj)
					},time)
				}
			}
		}
		search.onkeyup = throttle(obj.count,2000);

		//time 先记录一次时间 再不断对比
		function throttle2(fn,time){
			let prev = 0; //旧时间点
			return function(){
				let now = Date.now();
				if(new - prev > time){
					fn.apply(obj);
					prev = now;
				}
			}
		}
		search.onkeyup = throttle2(obj.count,2000);
	</script>
</body>
</html>

参考文献:
https://mp.weixin.qq.com/s?__biz=MzAxMTMyOTk3MA==&mid=2456451562&idx=1&sn=73910cc04c9de46668869cc6f01068a3&chksm=8cdc1137bbab982139794193689c60e3485d9ba539cc48e8b95ca3ec9003f317f7742a716adb&mpshare=1&scene=24&srcid=0727lOUSK6DUauV84jIvUTJ7&sharer_sharetime=1627393410423&sharer_shareid=974ccd5c7437aef4c0fe1590ef081d17#rd

前端开发必备的20个手写功能:防抖和节流的JavaScript实现 其中,防抖和节流是两个非常重要且常用的功能,它们可以有效地控制事件的触发频率,提高用户体验。本文将详细介绍防抖和节流的概念,并给出它们的JavaScript实现代码示例。函数接受一个回调函数和时间间隔作为参数,并返回一个新的函数。该新函数会记录上次执行回调函数的时间,如果当前时间与上次执行时间的间隔大于等于时间间隔参数,则执行回调函数,并更新上次执行时间。通过使用这两个功能,我们可以更好地控制事件的触发频率,提高前端应用的性能和用户体验。函数接受一个回调函数和延迟时间作为参数,并返回一个新的函数。 阅读详情

相关推荐

Unity+ARFoundation 探坑之路

前两天想要上手Unity来AR方面的项目东东 ,探索过程中出现了各种各样的问题,现在将这个过程中遇到的各种各样问题梳理一下,希望后来者能开开心心上手Unity+AR。 注意:这是一篇踩坑博客,具体搭建还请自行百度。 一、ARFoundation or ARCore or ARKit Unity作为一个平台,不直接提供XR(包括VR、AR和MR)的开发包,这时就需要其他公司提供各种各样的SDK工具包...

qq_43575926的博客 7134

使用lodash 中debounce()解决防抖

使用lodash 中debounce()解决防抖,如何解决防抖,lodash 中debounce如何使用,防抖

你喜欢大熊猫嘛 1万+

别再死记硬背了!用51单片机的AD/DA和PWM,亲手做个简易示波器信号发生器

本文详细介绍了如何利用51单片机的PWM和AD/DA功能制作简易示波器信号发生器。通过PWM模拟DAC输出波形,结合XPT2046 ADC进行信号测量,实现方波、三角波和正弦波的生成与显示。项目不仅成本低廉,还能帮助电子爱好者深入理解51单片机的核心功能,是理论与实践结合的绝佳案例。

weixin_28675839的博客 265

UniApp按钮短时间内点击多次只网络请求一次实现防抖或节流

通过使用防抖或节流函数,我们可以确保在UniApp中,当用户短时间内多次点击按钮时,只发送一次网络请求。这不仅提高了用户体验,还减少了不必要的网络负担。在实际开发中,根据具体需求和场景,选择合适的防抖或节流函数来处理按钮点击事件是非常重要的。

qq_40649554的博客 2841

保姆级教程:在NXPS32144环境下安装EB TRESOS 29.0.0并配置MCAL开发环境

本文提供了一份详细的保姆级教程,指导如何在NXP S32K144环境下安装EB TRESOS 29.0.0并配置MCAL开发环境。内容涵盖从前期资源准备、软件安装步骤、核心的MCAL关联配置,到首次创建AUTOSAR工程并进行模块配置的全流程,旨在帮助汽车电子开发者搭建稳定、可用的底层软件开发地基。

wind6的博客 957

服务器安全配置:二、本地安全策略设置

密码最长使⽤期限”设置为“90天”;“⽤可以还原的加密来存储密码”设置为“禁⽤”“复位账户锁定计数器”设置为15分钟,贴图这里是我自己设置的时间,15分钟也够用,具体看自己需要。”网络访问: 不允许 SAM 帐户和共享的匿名枚举“设置为“已启用””网络访问: 限制对命名管道和共享的匿名访问“设置为“已启用””网络访问: 不允许匿名枚举 SAM 帐户“设置为“已启用”“关机: 允许系统在未登录的情况下关闭”设置为“已禁用”(1)交互式登录:不显示最后的⽤户名”设置为“已启⽤”

weixin_48825672的博客 3136

vue笔记 短时间内处理多次请求,只执行最后一次请求问题

今日用了近一个小时解决这个问题。。。。。 以后遇到此问题可以直接使用lodash工具库的debounce方法 具体可查看官方文档 首先用命令行导入lodash 接着直接引用工具库 created () { let _ = require('lodash') // 引用 this.setOneGet = _.debounce(this.getSearchCompanyCityI...

qq_39139322的博客 5504

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1815

lodash源码中debounce函数分析

lodash源码中debounce函数分析 一、使用 在lodash中我们可以使用debounce函数来进行防抖和截流,之前我并未仔细注意过,但是不可思议的是,lodash中的防抖节流函数是一个函数两用的,所以今天我就简单分析一下,它是如何做到的; lodash中的debounce官网用法 // 情况一:当resize事件触发后,并不会立即执行,而是会直到密集程度大于150的时候,才会触发calculateLayout执行;也就是我们常说的防抖函数; jQuery(window).on('resize',

weixin_50786692的博客 5954

【雷达通信】雷达信号处理仿真【含Matlab源码 2509期】

雷达信号处理仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 904

数学史学习资料:史前数学

著名物理学家伽莫夫(宇宙大爆炸理论以及核聚变理论的提出者)在他的科普书《从1到无穷大》中举了这样一个例子。两个原始部落的酋长比赛,看谁说的数字大。第一个酋长说了三,第二个酋长想了半天,然后说你赢了。你今天听起来觉得这两个人真可笑,至少说出四,岂不就赢了?但是对这两位酋长来讲,所拥有的东西就很少超过三个,比三个多的东西他们就觉得没有必要数清楚了,就用许多来形容了。也就是说,他们生活的环境限制了他们的认知。

howard2005的专栏 902

JS函数防抖与节流

JavaScript函数防抖(debounce) 前端开发非常通用的技术点 作用:防止用户短时间内,大量高频的重复点击按钮,导致大量触发请求 <el-button type="primary" round size="small" @click="clickBtn">从选中词汇开始播放</el-button> ... methods: { clickBtn(){ clearTimeout(this.debounce);

Beatingworldline的博客 429

用长tree方式做等长线

1)写一个sdc,把等长线的起点设置成clock source,用于创建create_clock,至于period和waveform等参数随便写即可。然后clock_opt -from build_clock -to route_clock即可。3)在正式cts之前或之后,给自己创建的scenario长tree并don't touch。前面讲过了如何用set_data_check做等长线,这里再讲一下如何用cts的方式做。2)为该clock创建一个新mode,并创建对应的scenario。

m0_61544122的博客 622

前端面试必备:防抖与节流之节流及其封装函数

节流相对于防抖来说就很好理解了,节流就是限制流量,比如,在一段时间内,只能触发一次,而不是像防抖一样,一直延迟延迟。 在这里,这段时间就是一个判断标准,我们只需要取此次触发事件的时间和上次触发事件的时间的差值,与我们设定的这段时间进行比较即可,如果超过,那么就可以触发,如果不可以,就要重新设置计时器。 看过防抖的小伙伴看节流一定更加流畅,鉴于节流比较简单,就直接上代码加注释。 function throttle(fn,delay){ var t=null; var

Cheirre的博客 779

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

前端面试必备:防抖与节流之防抖及其封装函数

使用带有延迟执行的函数时,触发与之关联的事件即可延迟执行函数,但在延迟的时间内再次或多次地进行事件的触发,延迟时间就会出现失常,对事件的触发及函数的执行都会有很大的影响,所以我们使用函数防抖来解决这个问题。 函数防抖 原理:不断地对回调函数进行延迟。 假设延迟时间为n秒,事件触发后,n秒内再次触发事件,则要重新开始计时,直到延迟时间为n秒时,函数才执行。 这很像生活中的场景,比如乘坐电梯,假设只有一楼有电梯的按键,电梯中间也不能停止,将乘客都送往顶楼。 触发事件:从电梯外按电梯的按键。 延迟

Cheirre的博客 1258

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

防抖与节流:前端高手的必备技能,告别卡顿!

本文介绍了前端开发中常用的两种性能优化技术——防抖(debounce)和节流(throttle)。防抖是在事件停止触发后执行回调,适用于搜索联想等场景;节流是按固定间隔执行回调,适用于滚动加载等情况。文章详细讲解了两种技术的实现原理、代码示例及区别对比,并提供了进阶实现方案和React/Vue框架下的应用示例。最后总结了选择使用原则:关注最终结果用防抖,需要规律执行用节流,同时要注意时间间隔设置和内存管理,以提升页面性能和用户体验。

小白的博客 708

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

前端性能优化之必备良品,防抖和节流

1.防抖 什么是防抖? 动作绑定事件,触发事件,但不立即执行动作在一定时间后执行,在这段时间内,反复触发时间,则重新等待一定的时间后在执行动作。 通俗一点讲防抖就是多次触发,在停止触发一定时间后执行操作。常用于搜索时的优化,避免用户未输入完成不停的查询,还有防止多次点击按钮多次请求等等。 实现代码如下: debounce(fn, delay) { let timer = null; return function ()...

Two_Too的专栏 281

前端面试必备:彻底搞懂防抖和节流及其应用场景

防抖和节流 函数节流和函数防抖,两者都是优化高频率执行js代码的一种方法 防抖(debounce):只要不是最后一次触发就不会发送异步请求(定时器实现)。 节流(throttle):只要第一次请求发送后,响应没回来,就不能发送第二次请求(开关变量实现)。 防抖 现象 看下以下代码(模拟客户端向服务器发送请求): window.onscroll = function () { console.log("发送agax请求,加载更多..."); }; 可以看到,我仅仅向下滑动了3次,向上滑

, 2886

居然还不知道防抖和节流?前端性能优化的必备神器!

防抖(Debounce)和节流(Throttle)是前端开发中常用的性能优化技术,主要用于控制高频触发的事件处理函数的执行次数。

写完这行代码打球去的博客 497

前端必备工具函数:防抖、节流与深拷贝实现

在前端开发中,性能优化和数据处理是核心技能。防抖(debounce)和节流(throttle)是控制函数执行频率的经典技术,前者确保事件停止触发后执行,后者保证固定间隔最多执行一次。深拷贝(deep clone)则是处理复杂对象复制的关键技术,解决了浅拷贝的引用传递问题。这些基础工具函数广泛应用于搜索联想、滚动加载、表单验证等场景,理解其实现原理能帮助开发者应对复杂业务需求。通过手写实现这些函数,不仅能深入理解JavaScript事件循环和内存管理机制,还能根据项目特点进行定制优化。本文以Lodash等工具

weixin_34116482的博客 48

前端必备:手写防抖、节流等6大工具函数详解

防抖(debounce)和节流(throttle)是前端性能优化的核心技术,通过控制函数执行频率来提升页面响应速度。防抖原理是在事件触发后延迟执行,若期间重复触发则重新计时,适用于搜索联想等场景;节流则是固定时间间隔执行,适合处理滚动事件等高频触发。深拷贝(deepClone)解决了对象引用传递导致的数据污染问题,需要递归处理各种数据类型和循环引用。这些工具函数体现了闭包、高阶函数等JavaScript核心概念,掌握其实现原理能帮助开发者在表单提交、无限滚动等实际业务中灵活应用,同时提升代码质量和面试竞争力

weixin_33290540的博客 218

防抖与节流实战:前端性能优化必备技巧

防抖和节流是前端性能优化中不可或缺的“利器”。理解其原理差异,并能在正确的场景中选择和应用,是高级前端工程师的必备技能。本文提供的代码实现兼顾了功能完整性与边界情况处理,你可以直接复制到项目中使用。“防抖等最终,节流控频率”。在实际开发中,除了手动实现,也可以使用 Lodash 等工具库中成熟的_.debounce和_.throttle函数。但理解其底层实现,能让你在遇到更复杂的需求时游刃有余。

qq_63084249的博客 113

深入理解防抖与节流:前端性能优化必备技巧

本文探讨了前端开发中的防抖和节流技术。防抖确保在特定时间内只执行一次函数,适用于用户输入;节流限制函数在一定时间内只能执行一次,适合频繁触发的事件。通过实现这两种技术,开发者可以提升应用性能和用户体验。

weimengen的博客 369

前端性能优化篇(节流/防抖/懒加载)及前端开发必备的优化小知识

前端性能优化篇(原生JS实现)节流防抖图片懒加载常见的图片优化手段 哈喽哈喽!大伙们~我来分享、记录知识啦, 希望能够帮助到大家哈,有不足的地方,还请大佬多多关照下喔 那废话就不多说咯~咱这就去看看代码 节流 let Oinput=document.querySelector("#inp"); let flag=true; Oinput.oninput=function(){ if(!flag){ return; } flag=false; setTim

weixin_45476309的博客 748

防抖和节流的区别和实现详解(中高级前端面试必备知识)

前言 什么是防抖?什么是节流?它们之间有什么区别?你能举例说明一下吗? 上面这些问题在面试的时候你有被问到过吗?网络上也有很多文章已有说明,但是大部分由于篇幅过长或者描述不清晰,导致难以理解。因此,自己结合了实际的案例和大家分享一下。篇幅很短,花几分钟就可读完,如果有不明白的地方,欢迎在下方留言讨论。 简介 在网页运行的某些场景中,有些事件会不间断的被触发。如scroll事件并不是我们想象中的,滚动一次触发一次。而是会多次被触发,由于过于频繁地DOM操作和资源加载,严重影响了网页性能,甚至会造成浏览器崩溃。

tager168的博客 467

前端必备五大利器:深拷贝、发布订阅、节流防抖与懒加载

在JavaScript开发中,数据安全与性能优化始终是工程实践的两大核心命题。深拷贝作为数据隔离的基础手段,需要完整处理Date、Map、Set、循环引用等边界类型;发布订阅则通过事件总线实现模块解耦,其设计思想与MQTT消息协议如出一辙。面对高频交互场景,节流与防抖以不同策略控制函数执行频率——防抖关注最后一次触发,节流保证固定间隔执行,二者共同构筑前端性能优化的黄金防线。懒加载则借助IntersectionObserver或scroll监听,将昂贵的资源请求延迟到真正需要时。这些工具函数不仅是面试常客,

weixin_27240351的博客 288
上一篇: webpack:多文件、多环境、跨域处理、热加载
下一篇: React学习:入门实例-学习笔记
monkeyhlj
博客等级 码龄9年 1万+粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值