ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

什么是防抖和节流?有什么区别?如何使用?

2022-02-24 22:03:03  阅读:173  来源: 互联网

标签:触发 防抖 节流 什么 事件 执行 函数


使用场景

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)

标签:触发,防抖,节流,什么,事件,执行,函数
来源: https://blog.csdn.net/weixin_44251670/article/details/123120870

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有