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

使用场景

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值