debounce 与throttle

背景

开发过程中我们会遇到一些场景,事件频繁被触发,导致频繁的DOM操作等,导致UI卡顿 甚至浏览器崩溃等。

1、window对象的resize、scroll 事件

2、拖拽时的mousemove事件

3、input的change、keyup事件等

4、游戏中的mousedown、keydown事件

5、发送请求按钮为了防止用户不停的点击

解决方案

这些场景我们会对他做节流处理,也就是说一段时间内触发的事件我们的函数只执行一次。throttle和debounce 都可以帮我们在一段时间内防止函数被多次调用。下面来聊一下debounce 和 throttle 这两种解决方案。

先查了一下这两个单词的英文意思,debounce:去抖;防反跳, throttle: 节流。

debounce:

当调用动作n毫秒后,才会执行该动作。如果这n毫秒内又调用该动作,则重新计算时间。

例如:一个点击事件,用了debounce,点击事件被执行直到你停止点击 n毫秒后。

throttle:

当调用动作被触发,立即执行,但是这n毫秒内,再次触发不会被执行。也就是说一个执行周期(n毫秒)内最多只能执行一次。

 

举个?:

页面存在一个按钮,点击时会触发点击事件。用throttle和debounce 做优化,设置执行周期为1000ms。然后不停的点击按钮。则:

debounce(handleClick, 1000) //只会执行一次,在最后一次点击完1000ms后

throttle(handleClick, 1000) //第一次点击立即执行一次,1000ms后如果再被点击则再执行

使用场景:

debounce: 

1、input change时 自动发送ajax请求

2、window resize时重新计算样式或布局

throttle:

1、scroll 时更新页面

2、防止用户疯狂点击按钮,而触发事件

 平时比较常用还是throttle。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值