debounce 与throttle

2024-01-10 18:48
文章标签 debounce throttle

本文主要是介绍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, 

这篇关于debounce 与throttle的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/591730

相关文章

Vue3 + TypeScript 实现防抖(Debounce)和节流(Throttle)

在Vue3项目中结合TypeScript使用防抖(Debounce)和节流(Throttle)技术,可以有效提升应用的性能和用户体验,尤其是在处理频繁触发的事件(如滚动、窗口大小调整、输入框内容变化等)时。下面将详细介绍这两种技术的原理、使用方法以及适用场景。 一、防抖(Debounce) 原理: 防抖技术通过延迟函数的执行来减少函数的调用频率。在事件被触发n秒后再执行回调,如果在这

debounce函数

当在扩展一个Angular应用的时候,巨大的数据集导致$digest()循环运行缓慢,处理这个$digest()循环延迟问题的方案是使用debounce函数。提示:debounce函数是指,只要它一直在被调用,它就不会被触发,直到它不再被调用的X毫秒后。   e.g: 1 < input  ng-model = "user.name"  ng-model-options = "{

简述throttle-debounce

throttle-debounce 限制函数的执行频率 GitHub 地址 throttle-debounce 安装 npm install throttle-debounce --save throttle 限制回调函数的执行频率 /*** 节流(限制函数的执行频率)* @param delay 延迟的时间* @param noTrailing 在最后一次调用时是否

Android Monkey测试入门-4-Monkey高级参数之throttle

前面一篇文章,我演示了如何利用Monkey给手机百度,做随机100个事件。我们知道,一共差不多耗时1.7秒不到,完成了1000个事件。这里要解释一下,我们肉眼看到的事件肯定没有1000个,一般点击事件,有交互效果,才能被我们眼睛识别,主要有点击事件,输入事件和滑屏事件,还有其他事件,这1000个每种事件是随机分配的。由于执行时间很短,看起来很快,那么有没有办法,让执行速度慢一点,我们

【前端面试常见问题】防抖(Debounce)与节流(Throttle)

目录 一、概念阐释         1. 防抖(Debounce)         2. 节流(Throttle) 二、实现方法         防抖函数的实现         节流函数的实现 三、区别与选择 四、面试技巧          在前端开发领域,性能优化是一个永恒的话题,尤其是在处理高频率触发的事件时,如窗口的resize、scroll事件或

手写节流throttle

节流throttle 应用场景 滚动事件监听scroll:例如监听页面滚动到底部加载更多数据时,使用节流技术减少检查滚动位置的频率,提高性能。鼠标移动事件mousemove:例如实现一个拖拽功能,使用节流技术减少鼠标移动事件的处理频率。动画效果:当实现一个基于时间的动画效果时,使用节流技术限制动画帧率,降低计算开销。 它使用了闭包和setTimeout来确保函数fn在指定的delay时间

手写防抖debounce

手写防抖debounce 应用场景 当需要在事件频繁触发时,只执行最后一次操作,可以使用防抖函数来控制函数的执行频率,比如窗口resize事件和输入框input事件; 这段代码定义了一个名为 debounce 的函数,它接收两个参数:fn(一个需要被防抖处理的函数)和 delay(一个延迟时间,单位是毫秒)。防抖(debounce)技术的主要目的是限制某个函数在一定时间内只执行一次,即使在这

JS 手写 节流throttle 防抖debounce函数

防抖debounce // 手写防抖function debounce(fn, delay = 200) {// timer 在闭包中let timer = null// 返回一个函数return function(...args) {if (timer) {clearTimeout(timer) // 清空上次的值}timer = setTimeout(() => {fn.apply

函数去抖(debounce) 函数节流(throttle)总结

1. 什么是函数去抖 & 函数节流 debounce使用场景throttle使用场景 2. 实现方法&应用 a. 简单实现 debouncethrottle b. 附:Lodash实现 debouncethrottle c. 附:Underscore实现 debouncethrottle 1. 什么是函数去抖 & 函数节流 让某个函数在一定 事件间隔条件(去抖debo

页面js实现防抖(debounce)和节流阀(throttle)本质区别

一、防抖(debounce)和节流阀(throttle)目的实现重复执行同一事件。 二、防抖(debounce)  实现连续触发同一事件 仅且执行最后一次事件   debounce(self => {   console.error('5s内连续触发执行最后一次')   }, 5000)   三、节流阀(throttle) 实现连续触发同一事件 在设定时间内 执行完 第一次事件之后