JS基础-防抖和节流

JavaScript014

JS基础-防抖和节流,第1张

2022.3.19补充

节流函数的另一种实现方式:

两者的区别:

防抖函数:在一定时间内执行一个方法多次,只执行最后一次。因为在事件触发会先清理timer,如果时间间隔不到则会被清理掉,只有你的间隔到了之后才会执行,因此前面的函数都会被清理掉。

节流函数:在一定时间内执行一个方法多次,只有第一次生效。因为在事件触发后会先判断timer是否存在,只有不存在的时候才会执行。

相当于防抖是强制清理,节流是不到时间进不了大门。

throttle节流阀技术可以防止事件函数(例如滚轮滚动)的回调函数被频繁调用。

节流阀函数的实现原理是:

节流函数每次执行时都会检查上次执行的时间,通过指定wait参数,来保证只有距离上次执行超过一定时间,才会真正执行内部包裹的回调函数。由此来避免一种重量级的函数(如重绘或者dom操作)被频繁调用而导致产生性能问题。

以underscore.js的实现为例

var scroller = document.getElementById('scroller_div')

// 此时console.log最多每300毫秒打印一次,不管onscroll事件触发得多么频繁,都不会超过这个频率。

scroller.onscroll = _.throttle(function (){

    console.log(scroller.scrollTop)

}, 300)