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

embedded/2024/10/19 7:02:37/

前言

防抖节流是可以说是一种优化组件性能的技巧,可以有效减少组件中的渲染次数和计算量,从而提高组件的响应速度和用户体验。在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 = nullreturn (...args) => {const context = thisif (timer) {clearTimeout(timer)}timer = setTimeout(() => {fn.call(context, ...args)}, time)}
}/*** 节流*/
const throttle = (fn, time) => {let activeTime = nullreturn (...args) => {const context = thisconst current = Date.now()if (current - activeTime >= time) {fn.call(context, ...args)activeTime = Date.now()}}
}


http://www.ppmy.cn/embedded/121055.html

相关文章

JS进阶 1——作用域、解构、箭头函数

JS进阶 1——作用域、解构、箭头函数 1.作用域 局部作用域分为&#xff1a;函数作用域和块作用域 函数作用域&#xff1a;在函数内部声明的变量只能在函数内部被访问块作用域&#xff1a;被{ }包裹的代码成为代码块&#xff0c;代码块内部声明的变量外部将有可能无法访问 var声…

IOS-IPA签名工具 request_post 任意文件读取复现

0x01 产品描述&#xff1a; 苹果手机中的IPA是指iOS应用程序&#xff08;iPhone应用程序&#xff09;的安装包文件&#xff0c;其文件扩展名为.ipa。IPA文件是经过编译的、已签名的应用程序文件&#xff0c;可以在iOS设备上安装和运行。通常&#xff0c;开发者通过Xcode等开发工…

滚雪球学MySQL[10.2讲]:数据库性能问题排查详解:从慢查询优化到内存与CPU使用分析

全文目录&#xff1a; 前言10.2 性能问题排查1. 慢查询优化1.1 慢查询日志的使用配置慢查询日志案例演示&#xff1a;慢查询日志分析 1.2 慢查询优化策略1.3 实际案例分析&#xff1a;分页查询优化 2. 内存与CPU使用分析2.1 内存使用分析内存配置优化 2.2 CPU使用分析CPU优化措…

JavaScript 网页设计案例:打造一个交互式用户界面

随着Web开发的不断进步&#xff0c;JavaScript已成为前端开发中不可或缺的语言。本文将通过一个具体的案例&#xff0c;展示如何利用JavaScript创建一个简单而富有交互性的网页&#xff0c;涵盖布局、样式和动态效果等方面。 一、项目概述 本案例将构建一个“任务列表”网页应…

PDF对话RAG应用开发实战

与大型 PDF 对话很酷。你可以与笔记、书籍和文档等聊天。这篇博文将帮助你构建一个基于 Multi RAG Streamlit 的 Web 应用程序&#xff0c;以通过对话式 AI 聊天机器人读取、处理和与 PDF 数据交互。以下是此应用程序工作原理的分步分解&#xff0c;使用简单的语言易于理解。 N…

C++:采用模板封装顺序表,栈,队列

1.顺序表&#xff1a; list.hpp #ifndef LIST_HPP #define LIST_HPP #include <iostream>using namespace std;template <class L>class Seqlist { private:L *ptr;L size;L len0;public:void init(L n){//堆区申请空间&#xff08;大小为n&#xff09;this->…

面试题05.08绘制直线问题详解(考察点为位运算符)

目录 一题目&#xff1a; 二详细思路汇总&#xff1a; 三代码解答&#xff08;带注释版&#xff09;&#xff1a; 一题目&#xff1a; leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二详细思路汇总&#xff1a; 这里先剧透一下简单版思路哦&…

kibana开启访问登录认证

编辑es配置文件&#xff0c;添加以下内容开启es认证 vim /etc/elasticsearch/elasticsearch.yml http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: Authorization xpack.security.enabled: true xpack.security.transport.ssl.enable…