什么是防抖和节流?有什么区别?如何使用?

2022/2/24 23:28:25

本文主要是介绍什么是防抖和节流?有什么区别?如何使用?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

使用场景

1、window对象的onscroll、onresize

2、拖拽的mousemove

3、射击游戏的mousedown、mouseup

4、文本输入,change

5、鼠标keyup等

这些事件每触发一次都会调用函数,向服务器发送一次请求,频率一高的话,浪费资源,意义不大。并且在4的情况下,用户频繁修改输入的内容,有可能前后发送的请求完成的时间点不同,这样就会导致接口返回的数据有几率和当下的用户输入是不匹配的。

不希望在事件在持续触发的过程中,频繁的去执行函数。

debounce(防抖)

防抖:事件触发n秒后才会执行,如果n秒内,事件再次触发,那么会取消之前的计时,重新计算时间,直到n秒,才开始执行。

举例for:如果A在问问题,那么B在A说完之前都不会回答,如果A停下了,但在n秒内又开始说话,那么代表还没说完,B不会响应,重新计算n秒;如果A停下后,n秒内没有再说话,判定为A已经说完了,这时候B才开始回答。

使用场景:百度搜索

防抖分为立即防抖非立即防抖

非立即防抖:触发事件后函数不会立即执行,而是在n秒之后执行,如果n秒之内又触发了事件,则会重新计算函数执行时间。
立即防抖:触发事件后函数会立即执行,然后n秒内不触发事件才会执行函数的效果

throttle(节流)

节流:让频繁执行的函数每隔n秒执行,减少执行次数。

举例for:对于一些要频繁执行的函数,只是让他执行的次数少一些,定义了时间间隔。

使用场景:dom拖拽

使用思路:函数使用延时调用,并且在每次触发函数前,都取消之前的延时调用。

节流分为时间戳定时版本

时间戳在时间段内执行

定时版本在定时时间结束后执行

总结

throttle和debounce都是通过减少事件触发后执行函数的次数来提高运行性能的手段,并没有减少实际事件触发的次数。例如,我keydown了几次就是几次,只是事件触发后向服务器发送的请求减少了,从而提高性能

参考

节流(throttle)与防抖(debounce) - 简书 (jianshu.com)



这篇关于什么是防抖和节流?有什么区别?如何使用?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程