作者:端庄的张佳迎 | 来源:互联网 | 2023-09-06 14:32
关于节流和防抖?
节流
节流的意思是,规定时间内,只触发一次。比如我们设定500ms,在这个时间内,无论点击按钮多少次,它都只会触发一次。具体场景可以是抢购时候,由于有无数人 快速点击按钮,如果每次点击都发送请求,就会给服务器造成巨大的压力,但是我们进行节流后,就会大大减少请求的次数。
let timer, flag;
function throttle(func, wait = 500, immediate = true) {if (immediate) {if (!flag) {flag = true;typeof func === 'function' && func();timer = setTimeout(() => {flag = false;}, wait);}} else {if (!flag) {flag = truetimer = setTimeout(() => {flag = falsetypeof func === 'function' && func();}, wait);}}
};
export default throttle
在vue.js使用场景
<template><div><div &#64;click&#61;"onClickDeom">点击事件</div></div>
</template><script>
import throttle from &#39;&#64;/utils/throttle.js&#39;export default {methods: {onClickDeom() {throttle (this.deomFun,6000)},deomFun(){console.log(&#39;123&#39;)},}}
</script>
防抖
防抖的意思是&#xff0c;在连续的操作中&#xff0c;无论进行了多长时间&#xff0c;只有某一次的操作后在指定的时间内没有再操作&#xff0c;这一次才被判定有效。具体场景可以搜索框输入关键字过程中实时 请求服务器匹配搜索结果&#xff0c;如果不进行处理&#xff0c;那么就是输入框内容一直变化&#xff0c;导致一直发送请求。如果进行防抖处理&#xff0c;结果就是当我们输入内容完成后&#xff0c;一定时间(比如500ms)没有再 输入内容&#xff0c;这时再触发请求。
let timeout &#61; null;
function debounce(func, wait &#61; 500, immediate &#61; false) {if (timeout !&#61;&#61; null) clearTimeout(timeout);if (immediate) {var callNow &#61; !timeout;timeout &#61; setTimeout(function() {timeout &#61; null;}, wait);if (callNow) typeof func &#61;&#61;&#61; &#39;function&#39; && func();} else {timeout &#61; setTimeout(function() {typeof func &#61;&#61;&#61; &#39;function&#39; && func();}, wait);}
}export default debounce
在vue.js使用场景
<template><div><div &#64;click&#61;"onClickDeom">点击事件</div></div>
</template><script>
import throttle from &#39;&#64;/utils/debounce.js&#39;export default {methods: {onClickDeom() {debounce(this.deomFun,6000)},deomFun(){console.log(&#39;123&#39;)},}}
</script>