防抖和节流

一、防抖

1.什么是防抖

防抖策略是当事件被触发后,延迟n秒后再执行回调,如果在这n秒内事件又被触发,则重新计时。
好处:当我们频繁地出发某个事件的时候,能保证不会频繁地执行回调,回调只执行一次,能提高浏览器的性能。
在这里插入图片描述

2.防抖的应用场景

输入框防抖
用户在输入框中连续输入一串字符时,可以通过防抖策略,只是输入完成后,才执行查询的请求,这样可以有效减少请求次数,节约请求资源。
例如,在输入框中输入你要查询的内容,每按下一个按键,都会触发一次请求,但只有最后一次的请求查询是有用的,所以怎么解决呢?用防抖解决!

3.实现输入框的防抖

   <script>
        // 1.定义延时器的id
        var timer=null
        // 2.定义防抖的函数
        function debounceSearch(kw){
            timer=setTimeout(function(){
                // 请求
                getList(kw)
            },500)
        }
        // 3.当用户触发keyup时清掉延时
        $('#input').on('keyup',function(){
            clearTimeout(timer)
            // ...省略
            debounceSearch(keywords)
        })
    </script>

二、节流

1.什么是节流

节流策略,可以减少一段时间内事件的触发频率
防止事件无限制的被触发,给它一个触发的间隔,在这个间隔时间内,你再触发这个事件,不会有任何的效果。
在这里插入图片描述

2.节流的应用场景

(1)鼠标连续不断地触发某事件(如点击),只在单位时间内只触发一次;
(2)懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率,而不必去浪费CPU资源;
举例:鼠标在页面上滑动,实现一个小图标跟随的效果,如果不使用节流,则mousemove这个事件会被触发很多次,如何降低事件被触发的频率?要使用节流。

3.节流阀的概念

生活中的例子:高铁卫生间是否被占用,又红绿灯控制,红灯表示被占用,绿灯表示可使用。假设每个人上卫生间都要花费5分钟,则5分钟之内,被占用的卫生间无法被其他人使用。
上一个人使用完毕,需要将红灯重置为绿灯,表示下一个人可以使用卫生间;
下一个人在上卫生间之前,需要先判断控制灯是否为绿色,来知晓能否上卫生间。
程序中,节流阀是怎么工作的呢?
(1)节流阀为空,表示可以执行下一次操作;不为空,表示不能执行下一次操作。
(2)如果当前操作执行完,必须将节流阀重置为空,表示可以执行下次操作了!
(3)每次执行操作之前,必须先判断节流阀是否为空。

    // 1.预定一个timer节流阀
    var timer=null
    $(document).on('mousemove',function(e){
        // 3.判断节流阀是否为空,如果不为空,则证明距离上次执行间隔不足1s
        if(timer){
            return
        }
        timer=setTimeout(function(){
            $(ang).css('left',e.pageX+'px').css('top',e.pageY+'px')
            // 2.清空timer节流阀
            timer=null
        },1000)
    })

三、防抖和节流的区别

1.防抖

如果事件被频繁地触发,防抖能保证只有最后一次触发生效!前面N多次的触发都会被忽略。

2.节流

如果事件被频繁地触发,节流能够减少事件触发的频率!因此,节流是具有选择性地执行一部分事件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值