一、为什么要在 JavaScript 中使用防抖与节流:
- JavaScript 是事件驱动的,大量的操作会触发事件,加入到事件队列中处理。
- 而对于某些频繁的事件处理会造成性能的损耗,我们就可以通过防抖和节流来限制事件频繁的发生;
二、防抖 (延迟生效最后一次执行)
1,定义和原理
定义:函数防抖(debounce),即如果短时间内大量触发同一事件,都会重置计时器,等到事件不触发了,再等待规定的事件,才会执行函数。
原理:设置一个定时器,设置在规定的时间后触发事件处理,每次触发事件都会重置计时器。
2,用处
防抖用于搜索框和滚动的监听事件处理,如果没有防抖,那么每输入一个字或者滚动屏幕,都会触发事件,甚至一秒钟触发几十次,性能就会浪费。
1 |
|
3,应用场景:
- 输入框中频繁的输入内容,搜索或者提交信息;
- 频繁的点击按钮,触发某个事件;
- 监听浏览器滚动事件,完成某些特定操作;
- 用户缩放浏览器的 resize 事件;
总之,密集的事件触发,我们只希望触发比较靠后发生的事件,就可以使用防抖函数;
三、节流 (稀释函数的执行频率)
1,定义和原理
定义:函数节流(throttle),每隔一段时间就执行一次。
原理:设置一个定时器,设置 0.5 秒后执行事件,如果时间到了,就会执行函数并重置定时器,等待下一个 0.5 秒后再执行。
2,用处
滚动栏的位置查询,就能设置每 0.5 秒执行一次函数。
1 |
|
3,应用场景:
- 监听页面的滚动事件;
- 鼠标移动事件;
- 用户频繁点击按钮操作;
- 游戏中的一些设计;
总之,依然是密集的事件触发,但是这次密集事件触发的过程,不会等待最后一次才进行函数调用,而是会按照一定的频率进行调用;
四、相同不同:
相同:为了缓解函数频繁调用、大量计算导致页面卡顿
不同:防抖是将多次执行变为最后一次执行,节流是将多次执行变为在规定时间内只执行一次.
I'm so cute. Please give me money.
- Post link: https://blog.gaocaipeng.com/2020/06/19/lsxk1n/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.