JavaScript中的防抖和节流
1.什么是防抖
防抖是指在事件触发后,延迟一定时间再执行回调函数。如果在延迟时间内又触发了该事件,则重新计时。这样可以避免在短时间内频繁触发事件导致的性能问题。
防抖的应用场景包括:
-
输入框搜索联想:用户连续输入时,延迟一定时间再发送请求,减少请求次数。
-
窗口大小改变时的事件处理:用户调整窗口大小时,延迟一定时间再重新计算布局,避免频繁重绘。
要 求:设置延时器,短时间高频率触发只有最后一次触发成功
代码演示:
//防抖
var timer = null
document.querySelector('button')
.addEventListener('click', function () {
clearTimeout(timer)
timer = setTimeout(() => {
console.log(1);
}, 2000)
})
2.什么是节流
节流是指在一定时间内只执行一次回调函数。如果在该时间段内多次触发事件,只有第一次触发会执行回调函数,后续的触发会被忽略。
节流的应用场景包括:
-
页面滚动事件:滚动过程中触发的事件处理,可以通过节流来减少触发次数,提高性能。
-
鼠标移动事件:鼠标移动过程中触发的事件处理,可以通过节流来控制触发频率,避免过多的计算和渲染。
防抖和节流的实现方式有多种,可以使用JavaScript编写自定义函数,也可以使用第三方库如Lodash提供的函数进行处理。
防抖和节流是前端开发中常用的优化技术,通过控制事件触发的频率,可以提升用户体验和页面性能。防抖延迟执行回调函数,避免频繁触发事件;节流在一定时间内只执行一次回调函数,控制触发频率。根据具体的应用场景选择合适的技术来优化代码。
要 求:设置状态锁,短时间高频率触发只有第一次触发成功
代码演示:
//节流
var key = false
document.getElementById('btn')
.addEventListener('click', function () {
if (!key) {
key = true
setTimeout(() => {
console.log(2);
key = false
}, 1500)
}
})
3.防抖和节流的统一作用
防止短时间内高频繁调用同一接口的方法。