防抖和节流简介

什么是防抖和节流

防抖

当事件被频繁触发时,不想让其频繁执行事件处理函数的一种解决方案。
该方案通过设定一个周期延迟执行动作,如果周期内又被重新触发,则重新设定周期,直到周期结束,执行动作。

节流

节流的方案是通过设定一个周期,在周期内只执行一次,如果在周期内重新触发事件,则不执行。一个周期结束后,开始新的周期。

为什么要防抖和节流

  1. 频繁触发事件会占用较多浏览器资源造成浏览器卡顿
  2. 响应速度跟不上触发速度,导致页面加载缓慢

防抖实现方式

function debounce(fun, delay) {
        var timer = null;
        return function(args) {
        //获取函数的作用域
            var that = this;
            //每次触发事件都会清除定时器,并重新设定超时调用
            clearTimeout(timer)
            timer = setTimeout(function() {
                fun.call(that, args);
            }, delay);
        }
    }

它规定了执行的周期,周期一到就执行,它的周期可能会一直延长,因为它的周期会重新计时
该方法适用于虽然触发事件很频繁但仍有间隔的情况

节流实现方式

 function throttle(fun, delay) {
  let last, deferTimer
  return function (args) {
   let that = this;
   let _args = arguments;
 //开始计时
   let now = +new Date();
   //如果在一个周期内,取消上一个定时器,重新设定定时器
   if (last && now < last + delay) {

   clearTimeout(deferTimer);
   deferTimer = setTimeout(function () {
   //开始新的周期
    last = now;
    fun.call(that, _args);
   }, delay)
   } else {
   //开始新的周期
   last = now;
   fun.call(that, _args);
   }
  }
  }

该方法由于触发事件的随机性需要通过时间戳计算执行周期,在周期内只执行一次,规定了执行的次数,它的周期是计算间隔的长度
该方法适用于一直触发事件中间没有间隔的情况

总结

  1. 防抖和节流都是对与频繁触发事件的解决方案,旨在减少相应的次数以保持浏览器的高效运行
  2. 防抖和节流各有特色,可以根据需要进行选择,防抖适用于有间隔的频繁触发事件的情况,节流适用于一直触发事件的情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值