js原生实现防抖(节流)

共同点
都用到了setTimeout定时器,都是在指定时间间隔后执行函数,都是为了解决数据时时变化而时时请求导致性能差的问题

区别
防抖在指定时间间隔里再次调用函数,会清除定时器,重新计时,直到在最新的计时时间间隔里没有调用函数,才会执行定时器里的函数。
而节流会在指定时间间隔后会执行一次函数,不会清除定时器而重新计时

防抖缺点
当用户在指定时间间隔里一直操作,那么setTimeout里的函数永远不会执行

节流缺点
如果用户一直操作,那么setimeout里的函数会在指定时间间隔后都会执行一次,如此反复。

以监听input的值举例:


// 防抖
var input = document.getElementById('input')
input.addEventListener('input', debounce(handle, 1000))
function debounce(fn,delay){
	var timer
	return function(...args){
		if(timer){
			clearTimeout(timer)
		}
		timer = setTimeout(()=>{
			fn.apply(this,args)
		}, delay)
	}
}
function handle(e){
	console.log(e.target.value)
}



————————————————
版权声明:本文为CSDN博主「yumihe」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32678401/article/details/108519597

————————————————


// 节流
var input = document.getElementById('input')
input.addEventListener('input', throttle(handle, 200))
function throttle(fn,delay){
	let timer
	let flag = true
	return function(...args){
		if(!flag){
			return
		}
		flag = false
		timer = setTimeout(()=>{
			fn.apply(this,args)
			flag = true
		},delay)
	}
}
function handle(e){
	console.log(e.target.value)
}
————————————————
版权声明:本文为CSDN博主「yumihe」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32678401/article/details/108519597
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值