函数到防抖与节流

韩瑶
• 阅读 1080

前言

在前端项目中,函数的防抖和节流应该算是身为一名合格的前端工程师必须掌握的知识了。

函数的防抖和节流的是什么

  • 函数的防抖:事件完成某段固定的时长后执行相应的函数
  • 函数的节流:事件执行期间每隔一段时间执行相应的函数
  • 函数的防抖与节流的区别在我看来有点类似生活中快递和外卖的区别:
    快递:一天中任何时间下的单一般都是晚上发货(固定时长)
    外卖:下单后饭做好后(每隔一段时间)立即送餐

为什么要掌握防抖和节流

函数节流(throttle)与函数防抖(debounce)都是可以限制函数的执行频次,根据不同的场景来对执行频率进行限制,避免了函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象。

函数的防抖和节流应用实例与实现

  • 防抖的应用

    1.防抖一般我们在搜索过滤功能中应用较多,如果只是监听搜索框的变化来搜索那搜索的频率会过高,导致页面抖动。因此我们需要限制搜索次数,等到输入最后一次(也可能是中间暂停的某次)间隔0.5秒后在执行搜索,这样就能控制搜索的频率了。

    2.表单重复提交

    3.滚动刷新
    实例代码1:

   var timer = null
   function debounce(fn,time){
        //触发频率小于500ms是则清除上次未执行的
        clearTimeout(timer)
        timer = setTimeout(function(){
            console.log('====执行=====')
            fn()
        },time)
   }
   //监听搜索input change事件
   element.addEventListener("input", function(event) {
    debounce(searchFunc,500)
   })
   //搜索
   searchFunc(){
       console.log('====serch=====')
   }

实例代码2-闭包实现:

//待完善
  • 节流的应用

    1.canvas画笔功能

    2.页面元素的拖拽

    实例代码1:

    var startTime = 0
    function throttle(fn,time){
        let nowTime = (new Date()).valueOf()
        if(nowTime-startTime > time){
            fn()
            startTime = nowTime
        }
    }
    
    document.addEventListener("mousemove",function(){
      //每隔1秒执行一次drag
       throttle(drag(),1000)
    });
    function drag(){
       console.log('=====执行=====')
    }

    实例代码2-闭包实现:

    //待完善

总结

在页面负载比较大的情况下,如何减少对浏览器内存的消耗是前端优化的必须要考虑到的。而防抖与节流的概念可以让我们极大的节约对浏览器内存的消耗,所以掌握防抖与节流是前端必备技能之一。

点赞
收藏
评论区
推荐文章
海军 海军
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墨
8个月前
《优化接口设计的思路》系列:第六篇—接口防抖(防重复提交)的一些方式
所谓防抖,一是防用户手抖,二是防网络抖动。在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。要针对用户的误操作,前端通常会实现按钮的loading状态,阻止用户进行多次点击。而对于网络波动造成的请求重发问题,仅靠前端是不行的。为此,后端也应实施相应的防抖逻辑,确保在网络波动的情况下不会接收并处理同一请求多次。
sum墨 sum墨
8个月前
《优化接口设计的思路》系列:第七篇—接口限流策略
好像一提到防抖,接下来就会提到限流,我在第六篇文章写了一些接口防抖的策略,那么这篇正好讲讲接口如何限流。不知道从哪里看到的,“防抖是回城,限流是攻击”,感觉真的很形象,我来简要描述一下
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(