防抖和节流

定义: 

防抖 (debounce) 和节流 (throttle)

  • 防抖:n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效。
  • 节流:n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时。
为什么会出现 防抖 和 节流

        防抖和节流是针对响应跟不上出发频率 这类问题的两种解决方案。

        在给DOM 绑定事件时,有些事件我们是无法控制触发频率的。如鼠标移动事件onmousemove,滚动滚动条事件 onscroll,窗口大小改变事件 onresize,瞬间的操作都会导致这些事件会被高频触发。如果事件的回调函数较为复杂,就会导致响应跟不上触发,出现页面卡顿,假死现象。在实时检查输入时,如果我们绑定 onkeyup 事件发请求去服务器端检查,用户输入过程中,事件的触发频率也会很高,会导致大量的请求发出,响应速度会大大跟不上触发

总结:以下场景往往由于事件频繁被触发,而重复执行DOM操作,资源加载等重行为、会导致UI停顿甚至浏览器崩溃。

1. window对象的resize、scroll和拖拽时的mousemove事件
2. 射击游戏中的mousedown,keydown事件
3. 类似百度搜索提示keyup事件

防抖 (debounce)

总结:什么是debounce,高频率触发的事件,我们最终只让他执行一次

        debounce,去抖动。策略是当事件被触发时,设定一个周期延迟动作,若期间又被触发,则重新设定周期,直到周期结束,执行动作。这是debounce的基本思想,在后期又扩展了前缘debounce,即执行动作在前,然后设定周期,周期内有事件被触发,不执行动作,且周期重新设定

        **debounce  的特点是当事件快速联系不断触发时,动作只会执行一次**。延迟debounce,是在周期结束时执行。但当触发有间断,且简短大雨我们设定的时间间隔时,动作就会有多次执行

节流 (throttle)

         throttle:是指在一定时间间隔内只执行一次操作。当事件触发后,会立即执行一次操作,然后在指定的时间间隔内忽略后续的事件触发。

        throttle 常用于处理高频率触发的事件,例如滚动事件、鼠标移动事件等。它可以限制函数的执行频率,减少不必要的计算和操作。 降低事件处理程序执行的频率。  比如,onmousemove事件如果一秒钟执行200次,通过节流可以只执行20次

面试题: 什么是防抖和节流

  • 防抖是等待一段时间后执行操作,如果在等待时间内又触发了事件,则重新计时;节流是在一定时间间隔内只执行一次操作。
  • 防抖适用于处理频繁触发的事件,节流适用于处理高频率触发的事件。
  • 防抖可以避免函数被频繁调用,提升性能和用户体验;节流可以限制函数的执行频率,减少不必要的计算和操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值