前端优化-防抖&节流

我发布了一个工具包,包括了防抖,节流,懒加载等工具函数。可以在 JS 和 TS 项目中使用 : https://www.npmjs.com/package/utils-h
GitHub :https://github.com/wtdsn/utils-h#readme

什么是防抖

顾名思义,就是防止抖动的。比如验证码点击切换,用户快速点击了5次,但其实不用切换五次验证码,只需要切换一次就行了。那么就可以使用防抖。

防抖的特点是一定时间内的连续多次的触发,只会执行一次真正的回调。

防抖的作用

节省资源,节省前端资源,提高性能;
如果要发起请求,还可以节省网络资源,降低服务器压力

什么是节流

节流是限制触发的频率,比如连续的滚动,scroll事件会被频繁的触发。如果这个时候,需要通过JS 去操作 DOM ,那么频繁的操作就会降低性能,导致页面卡顿
这个时候,就可能需要使用节流,限制它 16 ms 执行一次,如果不需要太及时,30ms执行一次也可以

节流的特点就是用户连续,频繁的触发某一事件时,真正的回调会以一定的频率进行执行。但总的次数比原本不节流的次数要少

节流的作用

节省资源,节省前端资源,提高性能;
如果要发起请求,还可以节省网络资源,降低服务器压力

其实和防抖一样,使用场景不同罢了

区别

防抖和节流的区别:

防抖是在连续,多次的执行某个动作时,只真正的响应一次。它限制了响应的次数。

节流是在连续,多次的执行某个动作时,限制了响应的频率。

假如我们10s内连续,快速地触发某个事件,防抖只会触发一次,而节流会按照一定的频率触发多次

从使用场景来看,比如一个搜索按钮,用户连续点击多次,只需要执行一次就可以了。但是如果是 resize 时,我们希望内容的宽高也能够及时的更改去适应 resize 的变化,那么就需要使用节流

使用场景

防抖:

  • 点击某个按钮,比如查询,搜索
  • 切换验证码
  • 自动保存用户编辑的内容时
  • Resize 变化时
  • 对用户输入的内容进行模糊匹配时

节流:

  • Resize 变化时
  • 对用户输入的内容进行模糊匹配时
  • Scroll 页面懒加载

有些场景 ,防抖和节流都可以使用,看实际的效果需求!

实现

主要的原理是利用闭包:对实际的回调函数进行封装,返回一个新的函数,利用闭包缓存的变量,控制回调是否执行

防抖

  • 简单版防抖函数

主要实现思路是设置一个定时器,如果在等待时间内重新触发,则取消定时器,重新计时

/** 
 * @param {any} wait 
 * @param {any} fun 
 */
function debounce_simple(wait, fun) {
   
  let timer
  // 注意点1:,这里不能用箭头函数,因为箭头函数的 this 是函数设置的位置。于调用无关
  // 并且无法使用 bind ,call 等
  return function () {
   
    clearTimeout(timer)
    // 注意点2:这里需要使用箭头函数,this 使用这里的 this 和 arguments。
    // 如果不是箭头函数,需要先把 this 和 arguments 缓存到其他变量使用
    timer = setTimeout(() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无糖的酸奶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值