防抖
一、什么是防抖
一个事件被高频触发时,我们只想让他执行一次
二、应用场景
1.点击按钮会请求接口,如果用户反复点击触发请求,这个时候就可以用防抖
2.输入框输入时请求数据
三、实现原理
四、代码
let timer = ''
export function antiShake(fun) {
clearTimeout(timer)
timer = setTimeout(() => {
if (fun)fun()
}, 1000)
}
节流
一、什么是节流
节流是在一段时间内只运行一次,若在一段时间内重复触发,只有一次生效。
二、应用场景
1. 页面滚动事件
2.累计计算鼠标移动距离
三、实现原理
四、代码
let time = 0
export function throttle(fun) {
if (time === 0) {
if (fun)fun()
time = 1
setTimeout(() => {
time = 0
}, 2000)
}
}
总结
相同点
防抖和节流本质上是优化高频率执行代码的手段
不同点
防抖是让你多次触发,只生效最后一次。适用于只需要一次触发生效的场景
节流是让你的操作,每隔一段时间触发一次。适用于多次触发要多次生效的场景