防抖和节流

180 阅读2分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。

什么是防抖和节流?

在工作中经常会用到防抖和节流,尤其是在面试问题中,更是高频,几乎是必问

其实 函数防抖和节流 就是 优化 高频率执行 事件代码的一种手段

防抖(debounce)

字面意思,简单来说就是 防止抖动

原理

规定一个时间长度,在这个既定时间内的事件 只触发一次,那么这个事件在既定时间结束时才会执行一次,如果在 在既定时间结束之前,又一次触发了这个事件,那么间隔时间会重新计算,也就是说当用户一直触发这个函数,且每次触发间隔时间小于既定时间,那么这个事件只会执行最后一次

应用场景

搜索框搜索输入。只需用户最后一次输入完,再发送请求

手机号、邮箱验证输入检测

窗口大小Resize。只需窗口调整完成后,计算窗口大小。防止重复渲染。

实例代码

/*
* @param fn 执行事件方法
* @param wait 等待时间段
*/
function debounce(fn,wait){ 
    var timer = null 
    return function() { 
        if(timer){ 
            clearTimeout(timer) 
        } 
        timer = setTimeout(fn,wait) 
    } 
}

节流 (throttle)

字面意思,简单来说就是 节约流量

同样规定 一个时间长度,在这个既定时间内,事件无论触发多少次,到时间结束,只会触发一次

应用场景

上拉加载,加载更多或滚到底部监听

搜索引擎,搜索框,搜索联想功能

高频点击按钮,表单重复提交

实例代码

/*
* @param fn 执行事件方法
* @param delay 间隔时间
*/
function throttle(fn,delay){
    var lastTime = 0
    return function(){
        var nowTime = new Date().getTime()
        if(nowTime - lastTime > delay){
            fn.call(this)
            lastTime = nowTime
        }
    }
}  

非常感谢各位帅哥美女们能看到这里,如果这个文章写得还不错或者对你有一点点帮助,求点赞求关注求分享