如何理解防抖与节流

1. 防抖

防抖的定义:当事件被触发后,延迟n秒后再执行回调函数,如果在这n秒内事件被再次触发,则重新计时,只有最后一次触发才会被执行。

what?一脸懵!没关系,这里有个小笑话,看完你应该就秒懂了:

小明军训,教官发令:向左转!向右转!向后转!大家都照着做,唯有小明坐下来休息,教官火的一批,大声斥问他为啥不听指挥?小明说,我准备等你想好到底往哪个方向转,我再转。

虽然是个笑话,却很好地说明了防抖的定义:给一个固定时间,如果你开始触发动作,并且在这个固定时间内不再有任何动作,我就执行一次,否则我每次都会重新开始计时。

我们可以用极端情况理解它:如果给定时间间隔足够大,并且期间一直有动作触发,那么回调就永远不会执行。放在笑话的语境里就是,只有教官最后一次发号后,小明才会转。


2. 节流

节流的定义:在规定的间隔时间范围内不会重复触发回调,只有大于这个时间间隔才会触发回调,把频繁触发变为少量触发。

如果你理解了防抖,关于节流,就更好理解了

学生上自习课,班主任五分钟过来巡视一次,五分钟内随便你怎么皮,房顶掀了都没事,只要你别在五分钟的时间间隔点上被班主任逮到,逮不到就当没发生,逮到她就要弄你了。

即用户会反复触发一些操作,比如鼠标移动事件,此时只需要指定一个“巡视”的间隔时间,不管用户期间触发多少次,只会在间隔点上执行给定的回调函数。

我们同样可以用极端情况来理解:如果给定的间隔时间是 100毫秒,用户永不间断地在屏幕上疯狂移动鼠标,那么你的回调函数会分别在 100毫秒、 200毫秒、 300毫秒... 就这么一直执行下去。

猜你喜欢

转载自blog.csdn.net/laya1211/article/details/126747758