throttle & debounce节流防抖
按需引入
如果未做全局配置,可以按需引入:
节流
javascript
// 引入
import { throttle } from '@/node_modules/fusions-ui/libs/function/applyEvent.js';
// 调用
throttle(() => {
console.log('触发节流');
});防抖
javascript
// 引入
import { debounce } from '@/node_modules/fusions-ui/libs/function/applyEvent.js';
// 调用
debounce(() => {
console.log('触发防抖');
});什么是节流和防抖?
节流
节流的意思是,规定时间内,只触发一次,例:规定时间为300ms,在这个时间内,无论点击按钮多少次,它都只会触发一次,具体场景如:限时抢购、秒杀活动等需要控制时间触发频率场景,由于有无数人快速点击按钮,如果每次点击都发送请求,会造成服务器压力过大,因此需要限制频率,减少请求次数,节流可以有效的控制请求频率。
防抖
防抖的意思是:在连续的操作中,无论进行了多长的时间,只有某一次的操作在指定的时间内没有再操作,这一次才会被判定有效,具体场景如:搜索输入关键字的过程中实时请求服务器匹配结果,如果不进行处理,那么就是输入框内容一直变化,导致一直向服务器发送请求,造成服务器压力过大,因此需要在输入框输入结束后,等待一段时间(比如300ms),再向服务器发送请求,防抖可以有效的控制请求频率。
温馨提示
fusions-ui内置的按钮组件 fu-button 内部已做节流和防抖处理,无需外部再做节流和防抖处理,配置 scene 属性为 throttle 或 debounce 即可。可以通过 blockTime 属性设置节流或防抖的时间。详见Button 按钮
节流
throttle(func, wait = 500, immediate = true)
规定时间内,只触发一次,可以通过 immediate 属性设置来决定触发的时机在这个时间的开始,还是结束的时候执行。
func触发回调要执行的函数wait触发间隔时间,单位ms,默认为500immediate在开始还是结束触发,如:设置wait为1500ms,如果在1.5秒内触发了5次,只触发一次,如果immediate为true,那么就会在第一次操作触发回调,如果immediate为false,那么就会在第5次操作触发回调。
html
<template>
<fu-button @click="handleClick">点击触发防抖</fu-button>
</template>
<script setup>
// methods方法
// 方式一
// const handleClick = () => {
// uni.$fu.throttle(() => {
// console.log('触发节流')
// }, 1000, true)
// };
// 方式二
const handleClick = () => {
uni.$fu.throttle(nextClick(), 1000, true)
};
const nextClick = () => {
console.log('触发节流')
};
// 以上两种方式都可以触发节流
</script>防抖
debounce(func, wait = 500, immediate = false)
在连续的操作中,无论进行了多长的时间,只有某一次的操作在指定的时间内没有再操作,这一次才会被判定有效
func触发回调要执行的函数wait触发间隔时间,单位ms,默认为500immediate在开始还是结束触发,如非特殊情况下,一般默认为false即可。
html
<template>
<fu-button @click="handleClick">点击触发防抖</fu-button>
</template>
<script setup>
// methods方法
// 方式一
// const handleClick = () => {
// uni.$fu.debounce(() => {
// console.log('触发防抖')
// }, 1000)
// };
// 方式二
const handleClick = () => {
uni.$fu.debounce(nextClick(), 1000)
};
const nextClick = () => {
console.log('触发防抖')
};
// 以上两种方式都可以触发防抖
</script>