防抖和节流(手写系列)

228 阅读1分钟

debounce(防抖)和throttle(节流)属于前端性能优化的的一部分,下面主要记录三部分:

一、适用场景

window对象的resize、scroll事件;输入搜索联想;监听滚动事件;鼠标不断点击触发;

  • debounce防抖动

强制函数在某个时间段内只执行一次,只关心最后一次结果

  • throttle节流

强制函数在某个间隔时间内制行,操作过程中持续反馈

二、手写

//防抖
function debouce(fun, delay){
    let timer
    return function(){
        clearTimeout(timer)
        timer=setTimeout(()=>{
            fun.call(this,arguments)        
        },delay)
    }
}

//节流
function thottle(fun, time){
    let t1=0
    return function(){
        let t2=new Date()
        if(t2-t1>time){
            fun.call(this,arguments)                        
            t1=t2
        }
    }
}