防抖和节流
防抖
- 防抖,防止抖动“你先抖动着,什么时候停下来,再执行下一步”
- 例如,一个输入搜索框,等输入停止后,在触发搜索。
限制执行次数,多次密集的触发只执行一次
防抖
function debounce(fn, delay = 5000) {
let timer = 0
return function () {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = 0
}, delay)
}
}
节流
- 节流,节省交互沟通,流不一定指流量。
- 一个一个来,按时间节奏,插队者无效。
function throttle(fn, delay = 5000) {
let timer = 0
return function () {
if (timer) return
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = 0
}, delay)
}
}
限制执行频率,有节奏的执行