如何区分 节流 和防抖(回答来源于chatPT)

码海映雪人
• 阅读 557

问:如何区分 防抖和节流
答:在 JavaScript 中,防抖和节流是处理高频触发事件的两种常用的技术,它们都有助于提高性能和避免代码中的一些问题。它们的本质区别在于处理函数被调用的方式:

  • 防抖:将几次操作合并为一次操作进行处理,即等到最后一次操作完成一定时间后再执行对应的函数。
  • 节流:将几次操作合并为一定时间内的一个操作,即在一定时间内只执行一次对应的函数。

具体来说:

  1. 防抖(debounce):
    当函数需要在一定时间内连续地被频繁地调用时,它会重新启动等待计时器,直到一段时间内没有新的调用产生。例如,在用户输入搜索关键字之前等待一段时间,以使输入结果不会过于频繁地更新。防抖的本质是保证在执行某个函数之前,间隔一段时间内没有再次触发事件。

例如:

 function debounce(func, delay) {
   let timer;
   return function() {
     const context = this;
     const args = arguments;
     clearTimeout(timer);
     timer = setTimeout(() => {
       func.apply(context, args);
     }, delay);
   };
 }
  1. 节流(throttle):
    当函数需要在一定的时间段内被频繁的调用时,只执行一次对应的函数,以减轻服务器压力。例如,用户在界面滚动时,只有拖动结束并停顿一段时间后,才显示大量的数据,以避免计算机的崩溃。本质上,即确保在一段时间内只执行一次相关函数。

例如:

 function throttle(func, delay) {
   let previous = 0;
   return function() {
     const now = Date.now();
     const context = this;
     const args = arguments;
     if (now - previous > delay) {
       func.apply(context, args);
       previous = now;
     }
   };
 }

综上,防抖和节流都可以优化高频触发导致的性能问题,但防抖和节流解决问题的方式略有不同。可以根据具体的场景和需求,选择相应的技术。

1.防抖(debounce):
防抖触发高频率事件时n秒后只会执行一次,如果n秒内再次触发,则会重新计算。
简单概括:每次触发时都会取消之前的延时调用。

2.节流(thorttle):
高频事件触发,每次触发事件时设置一个延迟调用方法,并且取消之前延时
调用的方法。
简单概括:每次触发事件时都会判断是否等待执行的延时函数。

区别:降低回调执行频率,节省计算资源。
防抖和节流本质是不一样的。防抖是将多次执行变为最后一次执行,节流是将
多次执行变成每隔一段事件执行
函数防抖一定连续触发的事件,只在最后执行一次,而函数节流一段时间内只执行
一次。

点赞
收藏
评论区
推荐文章
海军 海军
4年前
浅聊函数防抖与节流
防抖(debounce)所谓防抖,就是指触发事件后n秒后才执行函数,如果在n秒内又触发了事件,则会重新计算函数执行时间。防抖类型分为1.非立即执行版2.立即执行版3.合成版本防抖防抖应用场景登录、发短信等按钮避免用户点击太快,以致于发送了多次请求调整浏览器窗口大小时,resize次数过于频繁,造成计算过多,此时需要一次到
记录 30 seconds of code 项目个人觉得中有价值的片段或者小技巧(二)
DF系列1、防抖函数,限制高频触发jsconstdebounce(fn,ms0)lettimeoutId;returnfunction(...args)clearTimeout(timeoutId);timeoutIdsetTimeout(()fn.apply(this,args),ms);
落落落洛克 落落落洛克
4年前
性能优化之防抖和节流
我的前端学习笔记📒最近花了点时间把笔记整理到语雀上了,方便童鞋们阅读我的前端学习笔记📒(https://www.yuque.com/wanggangfeng
Chase620 Chase620
4年前
防抖和节流
防抖触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次触发,则重新计算事件思路每次触发的时候取消之前的延时调用方法,以当下为准//防抖functiondebounce(fn){lettimeoutnull;returnfunction(){clearTimeout
LinMeng LinMeng
4年前
js的防抖与节流
在进行窗口的resize、scroll,输入框内容校验等操作时,如果事件处理函数调用的频率无限制,会加重浏览器的负担,导致用户体验非常糟糕。此时我们可以采用debounce(防抖)和throttle(节流)的方式来减少调用频率,同时又不影响实际效果。函数防抖函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才
可莉 可莉
3年前
2020年前端开发面试必考:什么是前端防抖?
防抖(去抖),以及节流(分流)在日常开发中可能用的不多,但在特定场景,却十分有用。!(https://oscimg.oschina.net/oscnet/dc9ed2e656be427d8f3324e57538aa13.png)最近有同学遇到了要做防抖的需求,那今天李老师就来讲解一下,什么是防抖。为了方便查阅和让不了解防抖
Stella981 Stella981
3年前
2020年前端开发面试必考:什么是前端防抖?
防抖(去抖),以及节流(分流)在日常开发中可能用的不多,但在特定场景,却十分有用。!(https://oscimg.oschina.net/oscnet/dc9ed2e656be427d8f3324e57538aa13.png)最近有同学遇到了要做防抖的需求,那今天李老师就来讲解一下,什么是防抖。为了方便查阅和让不了解防抖
菜园前端 菜园前端
2年前
什么是防抖和节流?
原文链接::::tip防抖和节流一般在做用户体验优化的时候会用上。:::什么是防抖?是指一个事件在同一时间内被多次频繁触发后,最终只会执行一次。多次触发后会重新计算时间,只生效最后一次触发。基础案例可通过定时器来实现javascriptvartimer0f
sum墨 sum墨
9个月前
《优化接口设计的思路》系列:第六篇—接口防抖(防重复提交)的一些方式
所谓防抖,一是防用户手抖,二是防网络抖动。在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。要针对用户的误操作,前端通常会实现按钮的loading状态,阻止用户进行多次点击。而对于网络波动造成的请求重发问题,仅靠前端是不行的。为此,后端也应实施相应的防抖逻辑,确保在网络波动的情况下不会接收并处理同一请求多次。
sum墨 sum墨
9个月前
《优化接口设计的思路》系列:第七篇—接口限流策略
好像一提到防抖,接下来就会提到限流,我在第六篇文章写了一些接口防抖的策略,那么这篇正好讲讲接口如何限流。不知道从哪里看到的,“防抖是回城,限流是攻击”,感觉真的很形象,我来简要描述一下
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
码海映雪人
码海映雪人
Lv1
故国伤心,新亭泪眼,更洒潇潇雨。
文章
4
粉丝
0
获赞
0