在我们处理时间的时候总会遇到这样的情况,就是用户在一段时间内频繁的触发时间,比如说说window.resized这种事件,如果每一个时间都处理的话,那就会严重的消耗资源,最终导致界面卡死。
不过不用担心,解决办法也是有的,而且也很简单,就是给这个时间加上一个时间阀门,但是这产生了两个概念debounce和throttle,本人在搞清楚这两个概念的时候花了好大的劲,终于在今天被我搞明白了,其实一直困扰我的是debounce这个概念,因为最先出现的时候实在处理单片机上面按钮抖动问题,处理按钮按下这个行为在单片机中不是直接对高电平做出反应,而是要延迟几十毫秒,然后检测是否仍然是高电平,防止电气干扰产生假的按下按钮事件。这里的debounce就是在一段时间内检测出两个高电平才产生触发事件。
但是现在debounce的概念有了点区别,区别如下图
NO DEBOUNCE的情况

WITH DEBOUNCE的情况

这里的debounce就更像一个时间阀门,在一定时间内,只要你来了一个触发时间,那么我的计时就从头来过,直到在规定时间内没有新的时间发生,才去执行这个触发操作。
就好像这个邮递员,三分钟内你要是来寄信,那么我就不出发,并且把计时器重新置零,再等你三分钟,直到三分钟过了1秒,不管你后面有没有新的信,邮递员都出发了,发送的就是最后的那封信。