防抖和节流

防抖和节流都是解决用户频繁操作的一种解决方案,区别是:

debounce 防抖

用户在频繁操作的时候,只有当用户操作结束之后,才触发需要执行的方法(比如设置5s的防抖,意思就是在5s内,不管用户操作了多少次,都不会执行,只有当用户停止操作,5s之后才执行1次);

  • 应用,当用户点击保存的时候,避免用户多次点击保存,下发多个保存接口。
  • 注意:上面说了5s之后才执行,这只是防抖的一种,还有那种先立即执行一次,然后在5s不管你点击几次,都不执行,只有过了5s,在点击才会执行

throttle 节流

是用户在频繁操作的时候,用户的操作频率太快,通过设置节流,让用户操作执行的方法频率降低(比如用户设置了5s的节流,用户现在1s中操作一次,那用户第一秒第二秒,第三秒,第四秒的操作都不会执行方法,只有第五秒才会执行)

  • 应用,当用户在滚动页面时,如果需要监听滚动事件,如果不设置节流,会大量执行监听事件,浪费性能,因此需要节流,比如设置500ms,才执行一次
  • 注意:下面这个实现方式是通过时间戳来实现的,还可用用过setTimeout来实现,有多种方式。

debounce 防抖

//代码
function debounce(fn, t) {
    let timer;
    return function () {
        if (timer) {
            clearTimeout(timer);
        }
        timer=  setTimeout(() => {
            fn.apply(this, arguments)
        }, t)
    }
}
//应用(此代码意思是在1s内无论点击多少次btn,都不会打印,直至停止后1s)
<button id="btn">click</button>   //html
//js
    let btn = document.getElementById('btn');
    btn.onclick = debounce(function() {
        console.log(111)
    }, 1000)

throttle 节流

//代码
function throttle(fn, t) {
        let t1 = new Date().getTime();
        return function() {
            let t2 = new Date().getTime();
            // console.log(t2, t1)
            if ((t2 - t1) >= t) {
                fn.apply(this,arguments);
                t1 = t2;
            }
        }
}
//应用(此代码是监听scroll滚动,原先是滚动多次执行,现在是滚动1s中执行一次)
window.addEventListener('scroll', throttle(function () {
    console.log(123)
}, 1000))


最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容