js函数节流和函数防抖

js函数截流和函数防抖

开发过程中,总会遇到部分代码因为高频率执行造成缓存过多或者引起别的问题,函数节流函数防抖就是用来优化这些高频率执行的代码。

大家都知道哈士奇是一种智商感人的狗狗,那么经常会遇到出差什么的,给二哈准备好几天天的食物结果它没两天就吃完了,这时候我们就需要一个自动喂食机来控制每顿饭的量,让它刚好吃饱,也不至于吃撑。而函数节流就类似这个自动喂食机,在js代码在执行足够的频率就能达到效果的时候,限制代码的执行,这样节省我们的服务器资源,避免因为高频率执行造成的卡顿。

函数防抖是在相同的事件连续请求,请求结果是在上一次结果基础上新增或者相同的情况下,停止一段时间直到事件不再发生后再统一请求。就类似我们去银行存一万块钱,我们一百一百的存和一下全存的效果是相同的,但是一百一百的存就会严重的浪费效率。

下面是函数节流和函数防抖在页面元素滚动时候的应用场景
为了方便看到效果,我把时间都限制在1秒

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<style type="text/css">
		#one, #two, #three{
			width: 220px;
			height: 200px;
			border: 1px solid black;
			overflow-y: auto;
			margin: 20px auto;
		}
		#one-four, #two-four, #three-four{
			width: 200px;
			height: 600px;
		}
	</style>
	<body>
		<!--普通函数-->
		<div id="one"><div id="one-four"></div></div>
		<!--函数节流-->
		<div id="two"><div id="two-four"></div></div>
		<!--函数防抖-->
		<div id="three"><div id="three-four"></div></div>
	</body>
	<script type="text/javascript">
		// 普通函数
		document.getElementById("one").onscroll = () => {
			console.log('普通函数')
		}
		// 函数节流
		var closure = true // 初始化执行状态
		document.getElementById("two").onscroll = () => {
			if (!closure) return // 如果开关关闭,说明上次执行没有完成,则return
			closure = false // 关闭开关,开始执行
			setTimeout(() => {
				console.log('节流执行函数')
				closure = true // 打开开关
			}, 1000) // 延迟1秒执行函数,并打开开关,可以进行下一次执行
		}
		// 函数防抖
		var shake // 声明变量接受
		document.getElementById("three").onscroll = () => {
			clearTimeout(shake) // 每执行一下清除延时器,回归初始状态
			shake = setTimeout(() => {
				console.log('函数防抖') // 执行函数
			}, 1000)
		}
	</script>
</html>

注意: 函数节流示例代码内部延时器只是用来实现效果,在实际应用中,延时器位置应该是异步请求或者所需事件,成功返回或者指定结果成立改变状态,请不要被误导,谢谢
关于函数节流的具体应用场景在我的博客《基于Vue-cli的手写轮播图(无限轮播,切换,点击预览)【函数节流】》有具体的应用,地址https://blog.csdn.net/weixin_43882226/article/details/89552260

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值