在进行事件执行的时候;使用debounce(防抖)和throttle(节流)的方式来减少调用频率,同时又不影响实际效果。
debounce(防抖)
例:在滚动事件中,往往需要通过监听滚动的高度和滚动的距离来进行后续操作;但是实时监控又会对浏览器造成负担;这时就可以通过防抖的思想来对事件函数进行处理
当停止滚动操作后的n秒内不再执行此事件;就会触发后续相关操作
//防抖
const debounce = (fn, delay = 500) => {
let timer = null;
return function (...args) {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn.apply(this.args)
}, delay)
}
}
throttle(节流)
例:在进行事件点击的时候;会由于点击过快而造成多次触发该事件函数;从而造成不必要的性能浪费;因此,可以通过节流操作在触发该事件后的n秒内不再触发该事件
//节流
const throttle = (fn, delay = 500) => {
let timer = null
return function (...args) {
if (!timer) {
timer = setTimeout(() => {
fn.apply(this, args)
timer = null
}, delay)
}
}
}
个人看法:
节流就像是moba游戏的技能释放;释放后就会进入冷却
防抖就像是回城,再回城未完成的前提下,一旦再回城操作;就会停止回城;然后继续回城