js 防抖与节流

1.区别以及共同点

JS 防抖与节流
共同点区别应用场景
防抖 debounce在事件频繁被触发的时候
只执行最后一次
input输入
节流 throttle减少事件执行的次数有规律的执行拖拽,Scroll

2.代码实现

2.1.防抖的实现方法

let input = doucument.querySelector('input')

        input.addEventListener('keyup', debounce(function(){

                consle,log(input.value,'向后台取数据!')

        })

)

// 防抖

function debounce(fn,wait) {

        let timer = null;

        return function() {

            if(timer) clearTimeout(timer);

             timer = setTimeout( () => {        

                       fn.apply(this.arguments)

                        timer = null;

                },wait)

        }

}

上面代码的意思是:

找到页面中第一个 input 元素,添加一个 "keyup" 事件监听器,当用户输入内容时,使用防抖函数 debounce 来限制事件的触发频率,每次事件最多只被触发一次

防抖函数返回一个新函数,该函数会在一定时间内(这里是 1000 毫秒)不执行,在该时间内如果再次触发了该事件,会清除之前的计时器并重新设置计时器。当计时器结束后,才会执行传入的函数并向后台服务器请求数据,同时将 input 元素的值作为参数进行输出。

这样可以防止用户输入过快或者频率过高,导致向后台服务器发送重复的请求

2.2 节流函数代码的实现

let box = doucument.querySelector('.box')

box.addEventListenter('drag',throttle(()=>{

        console.log(e.clientX)

))

//节流

function throttle(fn, wait) {

        let timer = null;

        return function() {

                if(timer) return

                        timer = setTimeout( ()=> {

                                fn.apply(this,arguments)

                                timer = null;

                        },wait)

        }

}

上面代码的意思: 找到页面中 class 为 "box" 的元素,添加一个 "drag" 鼠标拖拽 事件监听器,当用户拖动该元素时,使用节流函数 throttle 来限制事件的触发频率每100毫秒触发一次事件,并在控制台输出鼠标的 x 坐标值。其中 throttle 函数返回一个新函数,该函数在 timer 计时器未结束时不会执行,从而实现了事件的节流

3.总结

防抖函数的作用是在用户停止触发事件后,延迟一段时间再执行函数。这样可以避免频繁地执行一些计算量大或者请求量大的函数,比如自动保存、搜索建议等。

节流函数的作用是在一定时间间隔内,只执行一次函数。这样可以保证函数的执行速度不超过设定的频率,比如滚动事件、窗口大小调整等。

防抖和节流函数的好处是可以提高性能,减少资源消耗,优化用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩召华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值