什么是防抖和节流?有什么区别?如何使用?
2022/2/24 23:28:25
本文主要是介绍什么是防抖和节流?有什么区别?如何使用?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用场景:
1、window对象的onscroll、onresize
2、拖拽的mousemove
3、射击游戏的mousedown、mouseup
4、文本输入,change
5、鼠标keyup等
这些事件每触发一次都会调用函数,向服务器发送一次请求,频率一高的话,浪费资源,意义不大。并且在4的情况下,用户频繁修改输入的内容,有可能前后发送的请求完成的时间点不同,这样就会导致接口返回的数据有几率和当下的用户输入是不匹配的。
不希望在事件在持续触发的过程中,频繁的去执行函数。
debounce(防抖)
防抖:事件触发n秒后才会执行,如果n秒内,事件再次触发,那么会取消之前的计时,重新计算时间,直到n秒,才开始执行。
举例for:如果A在问问题,那么B在A说完之前都不会回答,如果A停下了,但在n秒内又开始说话,那么代表还没说完,B不会响应,重新计算n秒;如果A停下后,n秒内没有再说话,判定为A已经说完了,这时候B才开始回答。
使用场景:百度搜索
防抖分为立即防抖
和非立即防抖
非立即防抖:触发事件后函数不会立即执行,而是在n秒之后执行,如果n秒之内又触发了事件,则会重新计算函数执行时间。
立即防抖:触发事件后函数会立即执行,然后n秒内不触发事件才会执行函数的效果
throttle(节流)
节流:让频繁执行的函数每隔n秒执行,减少执行次数。
举例for:对于一些要频繁执行的函数,只是让他执行的次数少一些,定义了时间间隔。
使用场景:dom拖拽
使用思路:函数使用延时调用,并且在每次触发函数前,都取消之前的延时调用。
节流分为时间戳
和定时版本
时间戳:
在时间段内执行
定时版本:
在定时时间结束后执行
总结
throttle和debounce都是通过减少事件触发后执行函数的次数来提高运行性能的手段,并没有减少实际事件触发的次数。例如,我keydown了几次就是几次,只是事件触发后向服务器发送的请求减少了,从而提高性能
参考
节流(throttle)与防抖(debounce) - 简书 (jianshu.com)
这篇关于什么是防抖和节流?有什么区别?如何使用?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南