当前位置: 首页 > news >正文

vue项目实战 - 如果高效的实现防抖和节流

在Vue项目中,处理高频事件的优化至关重要,直接影响用户体验和应用性能。防抖(Debounce)和节流(Throttle)是两种常用且有效的方法,可以控制事件触发频率,减少不必要的资源消耗。如何在Vue项目中高效地实现防抖和节流,是每个开发者需要掌握的实战技巧。本文将结合具体的Vue实例,详细介绍如何灵活应用这两种技术,帮助开发者在实际项目中提升前端性能和用户体验。

目录

1 安装和引入

2 防抖的调用学习 

3 节流的调用学习

4 使用方法总结 


1 安装和引入

执行安装命令

npm i js-tool-big-box

项目中引入(Vue项目),工具包对外提供了 eventBox 对象,可以用来调用防抖和节流的方法。

import { eventBox } from 'js-tool-big-box';

2 防抖的调用学习 

防抖呢,比如说一个人频繁在输入框输入值,然后我们需要去判断它输入的手机号对不对,邮箱对不对,后者拿着这个输入值去发送Ajax请求去查东西,肯定不能输入一个字符就赶紧拿着去查,对吧,所以就需要防抖。

防抖呢就是设定一个时间值,比如2秒,你在这2秒内有操作,就取消,一直到2秒后没有操作了,再去执行任务。

比如等电梯,早上着急打卡的同学们,越着急,越有人按电梯,有人按一下就得等5秒,除非有人急的不行了,按了关闭按钮。所以,等5秒,没人上了,电梯关闭,开始往上走。如果第4秒又有人按按钮,他进来了,那么就再等5秒吧。

<template><div><input @keyup="handleChange" v-model="inputVal" /></div>
</template><script>
import { eventBox } from 'js-tool-big-box';export default {name: 'dj',data () {return {inputVal: ''}},created() {this.myDebounce = eventBox.debounce((data) => {this.sendAjax(data);}, 2000);},methods: {handleChange(event) {const val = event.target.value;this.myDebounce(val);},sendAjax(data) {console.log('发送时间::', new Date().getTime());console.log('发送请求:', data);},}
}
</script>

在截图中,我分别输入了1   222 333 ,其中222和333是频繁输入的,然后只调用了一次

3 节流的调用学习

节流呢,就像坐火车,人来人往的车站,川流不息的人群,但火车有时刻表,隔多久一趟车。下拉刷新就正好用到这个地方。

<script>
import { eventBox } from 'js-tool-big-box';export default {name: 'dj',data () {return {inputVal: ''}},created() {this.myThrottle = eventBox.throttle((data) => {this.sendAjax(data);}, 2000);},methods: {handleChange(event) {const val = event.target.value;this.myThrottle(val);},sendAjax(data) {console.log('发送时间::', new Date().getTime());console.log('发送请求:', data);},}
}
</script>

看这个时间戳打印的,我一直在频繁输入,然后他隔一段时间才执行一次,不错不错,节流了。

4 使用方法总结 

方法名返回值入参
debounce传入的执行方法

第一个参数必填,表示需要执行的方法,

第二个参数非必填,表示需要延迟执行的时间,可不传,默认300毫秒

throttle传入的执行方法

第一个参数必填,表示需要执行的方法,

第二个参数非必填,表示需要延迟执行的时间,可不传,默认300毫秒

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 软考-程序员 知识点与部分真题梳理
  • qt多语言翻译不生效的原因
  • 回溯大法总结
  • microsoft的azure语音,开发环境运行正常,发布到centos7线上服务器之后无法运行解决方案
  • OneAPI接入本地大模型+FastGPT调用本地大模型
  • Python期末复习知识点大合集(期末不挂科版)
  • AWS安全性身份和合规性之Identity and Access Management(IAM)
  • 数据库--数据库基础(一)
  • 多微信如何高效管理?一台电脑就能搞定!
  • Android动态设置淡入淡出动画
  • 百度集团:AI重构,走到哪了?
  • JVM-调优之-高cpu线程问题排查
  • 跨境电商赛道,云手机到底能不能化繁为简?
  • 使用HTTP客户端在Python中进行网页抓取——笔记
  • ubuntu下分屏工具tmux常用操作
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 2019.2.20 c++ 知识梳理
  • CSS实用技巧
  • JS数组方法汇总
  • Shell编程
  • SpringBoot 实战 (三) | 配置文件详解
  • 创建一个Struts2项目maven 方式
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 数据科学 第 3 章 11 字符串处理
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 通过git安装npm私有模块
  • 组复制官方翻译九、Group Replication Technical Details
  • ​水经微图Web1.5.0版即将上线
  • ​学习一下,什么是预包装食品?​
  • "无招胜有招"nbsp;史上最全的互…
  • # wps必须要登录激活才能使用吗?
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (20050108)又读《平凡的世界》
  • (HAL库版)freeRTOS移植STMF103
  • (多级缓存)缓存同步
  • (二十三)Flask之高频面试点
  • (计算机网络)物理层
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (十) 初识 Docker file
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)SvelteKit教程:hello world
  • .“空心村”成因分析及解决对策122344
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET 发展历程
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .net反混淆脱壳工具de4dot的使用
  • .NET性能优化(文摘)
  • @SpringBootApplication 注解
  • @软考考生,这份软考高分攻略你须知道
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [100天算法】-目标和(day 79)