【愚公系列】《循序渐进Vue.js 3.x前端开发实践》012-Vue 组件的属性和方法:进行函数限流
| 标题 | 详情 |
|---|---|
| 作者简介 | 愚公搬代码 |
| 头衔 | 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 |
| 近期荣誉 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。 |
| 博客内容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。 |
| 欢迎 | 👍点赞、✍评论、⭐收藏 |
🚀前言
在现代Web开发中,性能优化是一个不可忽视的话题,尤其是在使用 Vue.js 构建复杂应用时,如何有效管理事件和数据更新显得尤为重要。函数限流(throttling)作为一种常见的性能优化手段,可以帮助我们控制函数的调用频率,从而提升应用的响应速度和用户体验。
本文将深入探讨如何在 Vue 组件中实现函数限流。我们将首先了解函数限流的基本概念及其重要性,然后通过具体示例演示如何在 Vue 组件中应用限流技术,以应对高频率触发的事件,如滚动、输入和窗口大小调整等。无论你是 Vue 新手还是有一定开发经验的程序员,这篇文章都将为你提供实用的技巧与思路,助你打造更加流畅和高效的用户界面。让我们一起揭开函数限流的神秘面纱,提升我们的 Vue 应用性能吧!
🚀一、进行函数限流
在工程开发中,限流是一个非常重要的概念。我们在实际开发中,经常会遇到需要进行限流的场景,例如网页上的某个按钮,当用户单击后,会从后端服务器进行数据的请求,在数据请求回来之前,用户额外的单击是无效且消耗性能的。或者,网页中某个按钮会导致页面的更新,我们需要限制用户对其频繁地进行操作。这时就可以使用限流函数,常见的限流方案是根据时间间隔进行限流,即在指定的时间间隔内不允许重复执行同一函数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>限流函数</title>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://unpkg.com/lodash@4.17.20/lodash.min.js"></script>
</head>
<body>
<div id="Application">
<button @click="click">按钮</button>
<button @click="throttleClick">限流按钮</button>
<button @click="debounceClick">防抖按钮</button>
</div>
<script>
const {createApp, ref} = Vue
var throttle = false
function throttleTool(callback, timeout) {
if (!throttle) {
callback()
} else {
return
}
throttle = true
setTimeout(() => {
throttle = false
}, timeout)
}
const config = {
setup() {
// 控制按钮是否可触发的变量
const throttle = ref(false)
const click = () => {
throttleTool(()=>{
console.log(Date())
}, 2000)
}
const throttleClick = _.throttle(function(){
console.log(Date())
}, 2000)
const debounceClick = _.debounce(function(){
console.log(Date())
}, 2000)
return {throttle, click, throttleClick, debounceClick}
}
}
createApp(config).mount("#Application")
</script>
</body>
</html>
该代码展示了三种不同的按钮点击处理方式,分别是无限流、手动实现的限流、使用Lodash库的限流和防抖。在分析过程中,我们将分别探讨每种限流实现方式的逻辑和作用。
🔎1.代码解析
-
HTML和库引用部分
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <script src="https://unpkg.com/lodash@4.17.20/lodash.min.js"></script>页面使用Vue 3进行构建,并引入了Lodash库(v4.17.20),后者提供了
throttle和debounce方法,用于简化限流和防抖操作。 -
三个按钮功能
<button @click="click">按钮</button> <button @click="throttleClick">限流按钮</button> <button @click="debounceClick">防抖按钮</button>- 按钮:普通点击事件,没有限流。
- 限流按钮:使用Lodash的
throttle进行限流处理。 - 防抖按钮:使用Lodash的
debounce进行防抖处理。
🔎2.限流实现角度解析
🦋2.1 手动实现限流
在throttleTool函数中,通过手动设置一个节流锁来实现限流操作:
var throttle = false;
function throttleTool(callback, timeout) {
if (!throttle) {
callback(); // 调用函数
} else {
return; // 如果锁定,退出
}
throttle = true; // 设置锁
setTimeout(() => {
throttle = false; // 在timeout时间后释放锁
}, timeout);
}
解析:
throttle变量充当锁,控制回调函数的执行频率。- 在
throttle为false时,函数可以立即执行;执行后将其置为true,并开启计时器setTimeout。 - 计时器结束后将
throttle重置为false,允许再次执行。
这种实现方式在时间段内只允许一次点击生效,适用于低频触发场景。
🦋2.2 使用Lodash库的限流和防抖
在Vue组件setup方法中,定义了Lodash限流和防抖按钮的功能:
const throttleClick = _.throttle(function() {
console.log(Date());
}, 2000);
const debounceClick = _.debounce(function() {
console.log(Date());
}, 2000);
解析:
_.throttle:每隔2000毫秒触发一次throttleClick,在时间间隔内忽略多余调用,适合频繁触发但需要固定速率的场景(如滚动事件)。_.debounce:延迟2000毫秒触发debounceClick,若在延迟期间再次触发,则重置计时器。适合用户停止触发一段时间后再进行操作的场景(如搜索框输入)。
🦋2.3 代码运行逻辑
click:调用click方法执行throttleTool手动限流,只有每隔2秒一次的点击会触发console.log(Date())。throttleClick:调用Lodash的_.throttle限流,每隔2秒输出一次时间,不会因频繁点击加快执行频率。debounceClick:调用Lodash的_.debounce防抖,点击停止2秒后才会输出时间,若2秒内继续点击,延迟计时重置。

- 点赞
- 收藏
- 关注作者
评论(0)