Vue2版本
// 防抖
// <el-button v-debounce="[reset,'click',300]" ></el-button>
// <el-button v-debounce="[reset]" ></el-button>
Vue.directive('debounce', {
inserted: function (el, binding) {
let [fn, event = "click", time = 300] = binding.value
let timer
el.addEventListener(event, () => {
timer && clearTimeout(timer)
timer = setTimeout(() => fn(), time)
})
}
})
// 节流
// <el-button v-debounce="[reset,'click',300]" ></el-button>
// <el-button v-debounce="[reset]" ></el-button>
Vue.directive('throttle', {
inserted: function (el, binding) {
let [fn, event = 'click', time = 300] = binding.value
let timer, timer_end;
el.addEventListener(event, () => {
if (timer) {
clearTimeout(timer_end);
return timer_end = setTimeout(() => fn(), time);
}
fn();
timer = setTimeout(() => timer = null, time)
})
}
})
Vue3版本
// 防抖指令
app.directive('debounce', { beforeMount(el, binding) {
let [fn, event = 'click', time = 300] = binding.value;
let timer;
el.addEventListener(event, () => {
if (timer) clearTimeout(timer); timer = setTimeout(() => fn(), time); }); } });
// 节流指令
app.directive('throttle', { beforeMount(el, binding) {
let [fn, event = 'click', time = 300] = binding.value;
let timer, timer_end;
el.addEventListener(event, () => {
if (timer) { clearTimeout(timer_end); return timer_end = setTimeout(() => fn(), time); } fn(); timer = setTimeout(() => timer = null, time); }); } });
![[每周一更]-(第140期):sync.Pool 使用详解:性能优化的利器](https://i-blog.csdnimg.cn/direct/26133b2ec80a4f34bc1cc6cdd3b9155f.jpeg#pic_center)


















![Warcraft Logs [Classic] [WCL] BOSS ID query](https://i-blog.csdnimg.cn/direct/e0c3e10e590b44c8b94b0d5cac4131ce.png)