浅谈js的防抖与节流

背景

今天公司提了一个需求,需要通过用户输入的内容来实时展示提示信息,因为需要调用接口获取数据,所以不可能用户输入的每个值的改变都调用一次接口,这样会增加服务器的负面,产生不必要的损耗。

解决办法

通过防抖与节流能够有效地解决这个问题。

原理

防抖:通过监听用户输入的改变(或其他方式的改变)来调用一个防抖函数,这个防抖函数会接收一个处理函数handle,handle函数设置一定的延时。

  1. 当在这个延时中用户的输入再次改变,就会再次调用防抖函数,此时返回函数会将这个延时清除之后在重设一次延时
  2. 当输入的变化在这个延时之后,才会真的调用handle函数。

防抖函数:

debounce(fn,wait){
	let timeout = null;
	return function() {
  		if(timeout !== null) clearTimeout(timeout)
  		timeout = setTimeout(fn, wait);
 	}
}

节流:通过监听用户输入的改变(或其他方式的改变)来调用一个节流函数,这个节流函数会接受一个处理函数handle,handle函数设置一定的延时。

  1. 当在这个延时中用户的输入再次改变,不重新调用handle函数,也不清除延时,
  2. 当到达这个延时时,handle函数被调用,而输入的改变会重新为handle函数设置延时。
function throttle(fn, delay) {
 	var prev = Date.now()
 	return function() {
  		var now = Date.now()
  		if (now - prev > delay) {
   			fn()
   			prev = Date.now()
  		}
 	}
}
对比

对比两种方式可以发现,防抖会为改变重设延时,而节流不会为改变重设延时而是确保每次调用handle函数一定大于等于延时。
防抖与节流对比图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值