基于Vue3内置的lodash函数库实现防抖节流

前言

防抖节流是可以说是一种优化组件性能的技巧,可以有效减少组件中的渲染次数和计算量,从而提高组件的响应速度和用户体验。在Vue3中可以使用`lodash`库中的`debounce`和`throttle`函数来分别实现防抖和节流。当然也可以自行设计实现防抖节流函数,调用方式都差不多。

防抖:在一定时间内,多次触发同一事件,只执行最后一次操作,常用于输入框搜索、滚动加载等场景。

节流:在一定时间内,多次触发同一事件,限制函数执行频率,防止函数被频繁调用,从而提高页面性能。

一、基于Vue3内置的lodash函数库实现防抖节流

(1)导入lodash函数库的防抖和节流方法

javascript 复制代码
import { debounce, throttle } from 'lodash'

(2)写两个按钮

javascript 复制代码
<el-button size="small" type="primary" @click="handleDebounceClick($event)">
  <el-icon :size="16" style="margin-right: 5px;"><Basketball /></el-icon>
  <small>防抖·篮球</small>
</el-button>

<el-button size="small" type="primary" @click="handleThrottleClick($event)">
  <el-icon :size="16" style="margin-right: 5px;"><Football /></el-icon>
  <small>节流·足球</small>
</el-button>

(3)写两个方法

javascript 复制代码
/**
 * 防抖·篮球
 */
const handleDebounceClick = debounce((evt) => {

  // ---- ^ 业务逻辑 ----
  // 定义fn方法
  const fn = (evt) => {

    console.log('debounce =>', evt)
  }
  // 调用fn方法
  fn(evt)
  // ---- / 业务逻辑 ----
}, 1000)

/**
 * 节流·足球
 */
const handleThrottleClick = throttle((evt) => {

  // ---- ^ 业务逻辑 ----
  // 定义fn方法
  const fn = (evt) => {

    console.log('throttle =>', evt)
  }
  // 调用fn方法
  fn(evt)
  // ---- / 业务逻辑 ----
}, 1000)

(4)防抖节流的实现方法

javascript 复制代码
/**
 * 防抖
 */
const debounce = (fn, time) => {

  let timer = null
  return (...args) => {

    const context = this
    if (timer) {

      clearTimeout(timer)
    }
    timer = setTimeout(() => {

      fn.call(context, ...args)
    }, time)
  }
}

/**
 * 节流
 */
const throttle = (fn, time) => {
  
  let activeTime = null
  return (...args) => {
   
    const context = this
    const current = Date.now()
    if (current - activeTime >= time) {
   
      fn.call(context, ...args)
      activeTime = Date.now()
    }
  }
}
相关推荐
Pedantic3 分钟前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘19 分钟前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆28 分钟前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师1 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆1 小时前
VSCode自动格式化三要素
前端
爱勇宝2 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen3 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
user20585561518135 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode5 小时前
Redis 在生产项目的使用
前端·后端
LiaCode5 小时前
一天学完 redis 的爽翻版核心知识总结
前端·后端