概念
debounce
字面理解是“防抖”,何谓“防抖”,就是连续操作结束后再执行,以网页滚动为例,debounce要等到用户停止滚动后才执行,将连续多次执行合并为一次执行。
throttle
字面理解是“节流”,何谓“节流”,就是确保一段时间内只执行一次,以网页滚动为例,throttle是如果用户一直在滚动网页,那么在滚动过程中还是会执行,只是一段时间内只执行一次,将连续执行的间隔变大了。
实现
debounce
第一次触发后,进行倒计wait毫秒,如果倒计时过程中有其他触发,则重置倒计时;否则执行。
throttle
第一次触发后先执行fn(lodash可以通过{leading: false}来取消),然后wait ms后再次执行,在单位wait毫秒内的所有重复触发都被抛弃。
应用场景
debounce
用来丢弃一些重复的密集操作,直到流量减慢。
throttle
用在每隔一定间隔执行回调的场景,即如果有连续不断的触发,每wait ms执行fn一次。
场景举例
debounce
- ajax 请求合并,不希望短时间内大量的请求被重复发送
- mouse move 时减少计算次数
- resize window 重新计算样式或布局

本文深入探讨防抖(debounce)与节流(throttle)技术,解析两者在处理连续操作时的不同策略。防抖用于合并重复操作,直至操作频率降低;节流则确保操作在固定间隔内仅执行一次,适用于需要定期响应的场景。文章通过具体实例,如AJAX请求合并、窗口调整大小及滚动事件,展示这些技术的实际应用。

3753

被折叠的 条评论
为什么被折叠?



