防抖与节流是前端性能优化的重要技术手段,也是常见的热门面试题,下面谈一下本人对这个的看法。
防抖:当事件触发之后,并不立刻响应事件,而是过一段时间间隔t才响应。如果在这段时间间隔内,事件再次触发,则取消之前的计时,以当前时刻重新开始计时,仍然要过时间间隔t之后才响应事件。时间间隔t结束后,执行回调函数。若之后事件再次触发,仍然和刚开始一样,须等待时间间隔t才会响应。
防抖常用业务场景:
1.输入框输入联想;
2.在线文档实时保存;
3.浏览器窗口resize。
节流:当事件触发之后,可以立刻响应事件,即执行回调。但回调执行结束后,须等待时间间隔t。在等待期间,若事件再次触发,则忽略。等待期满之后,如果事件再次触发,可以立刻响应事件,响应结束后,再次需要等待时间间隔t,在时间间隔t内的事件触发仍然忽略。总而言之,在事件间隔t之内,事件触发只会响应一次。
节流常用业务场景:
1.鼠标的scroll事件;
2.订单秒杀页面的提交订单按钮。
防抖与节流最终都可以减少事件响应次数来提升前端性能,那它们的主要不同点在于什么呢?
1.防抖主要体现在延迟响应事件,当在延迟期间事件再次触发,则重新计时,开启新的延迟等待期。而节流强调的是一个时间间隔内只会响应处理一次,若在这个间隔内多次触发事件,则会忽略。
2.防抖应用场景是希望事件全部触发后才去响应处理,而节流则是解决高频触发事件带来的性能开销。防抖的等待时间间隔可以很长,比如几秒甚至几分钟,而节流的等待时间间隔则非常短。