防抖&节流最完美的解释

一、防抖函数
原理:在事件被触发n秒后再执行回调,如果在n秒内再次触发,则重新计时;
适用场景:
1、典型的案例就是输入搜索:输入结束后N秒才进行搜索请求,n秒内又输入的内容就重新计时。解决这个bug
2、使用Echarts的时候,改变浏览器的宽度希望重新渲染Echarts图像,可以使用此函数提升性能。(虽然Echarts里有自带的resize函数)
3、登录、提交、表单提交按钮的时候防止重复多次提交;
搜索联想词功能类似生存环境请用lodash.debounce
以下是手写简化版的防抖函数:闭包实现的

function debounce(delay){
	let timer;
	return function (value){
		// 一定要清除setTimeout 我们应该存储timer这个变量
		clearTimeout(timer)
		timer = setTimeout(function() {
			callback(value)
		}, delay)
	}
}

二、节流函数
原理:当持续触发事件的时候一段时间内只调用一次事件处理函数 也就是一段时间内只做一件事情
经典案例:鼠标不断的点击事件,规定在n秒内多次点击只有一次生效

function thro(func, wait) {
	// 会执行你点击了 多少次 就会执行多少次
	// 这不是咱们想要的 我们想要的是 比如说时间是一秒 一秒内点了100次 我也只执行一次
	let timeout
	return function() {
		if (!timeout) {
			// set 不执行 如果timeout有值的话就不执行
			timeout = setTimeout(function() {
				func()
				timeout = null
			}, wait)
		}
	}
}

三、防抖、节流的实际应用
图片懒加载的优化就是一个较为实际的应用

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值