前端优化——防抖与节流

防抖和节流

优化原理:防止高频率js代码的执行

防抖:以最后的操作为标准

举个栗子:我们创建一个input输入框,然后输入内容,当我们每按下一个按键,控制台都会输出所按下的内容:
在这里插入图片描述
怎么样,这手速是不是似曾相识?像不像单身多年的你们?
接下来,我们来尝试着优化一下:

let inp2 = document.getElementById("inp2");
			let t = null; //计时器标识
			inp2.oninput = function() {
				if (t !== null) {
					//清除之前的定时器
					clearInterval(t);
				}
				t = setTimeout(() => {
					console.log(this.value)
				}, 500)
			}

这段代码的意思是,当检测到一个input输入事件时,启动一个定时器,每500毫秒执行一次,若500毫秒内没有检测到输入事件,则取最后一次输入的内容作为标准。
结果:
在这里插入图片描述
接着让我们用闭包继续优化一下:

// 防抖优化2.0
			let inp2 = document.getElementById("inp2");
			inp2.oninput = debounce(function() {
				console.log(this.value); //这是真正的业务逻辑
				console.log(this)

			}, 500);

			function debounce(fn, delay) {
				let t = null; //计时器标识
				return function() {
					if (t !== null) {
						//清除之前的定时器
						clearInterval(t);
					}
					t = setTimeout(() => {
						fn.call(this)
					}, delay)
				}
			}

**

节流

让我们以窗口滑动举个例子:当检测到窗口滑动时,在控制台输出“滑动了”

window.onscroll = function() {
				console.log("滑动了")
}

在这里插入图片描述
我们可以看到,只要稍微一滑动,都会被检测到从而在控制台不断输出,这对资源是有较消耗的。
**
优化一下:

let flag = true;
			window.onscroll = function() {
				if (flag) {
					setTimeout(() => {
						console.log("滑动了")
						flag = true

					},500)
				}
				flag = false;
			}

在这里插入图片描述
可以看到,差别很大对吧,因为每隔半秒才会执行一次,这样控制了执行次数,自然减少了对资源地消耗。
当然,咱们要雨露均沾,节流咱也用闭包优化一下:

window.onscroll = throttle(function() {
				console.log("hauodngle")
			}, 1000)

			function throttle(fn, delay) {
				let flag = true;

				return function() {
					if (flag) {
						setTimeout(() => {
							fn.call(this)
							flag = true
						}, delay)
					}
					flag = false;
				}
			}

没了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值