为什么要防抖/节流?有什么作用?
在用户与页面的交互中,用户某些操作往往会频繁地触发事件例如点击、滚动、键入......。如果每次都执行对应的函数,可能会导致网页性能不佳、用户体验感差等等。而为了优化这种情况,我们往往会使用防抖和节流两种函数来限制函数执行的次数。
什么是防抖?
防抖指的是在一定时间内,如果连续触发同一个事件,那么只执行最后一次触发事件的操作,而忽略前面的所有操作。这样做可以有效地减少不必要的重复操作,避免因为用户频繁操作导致程序误判的问题。
/**
* @description 防抖
* @author Amerss
* @param {Function} func 目标函数
* @param {number} delay 延迟时间(默认延迟1s)
* @return {Function}
*/
function debounce(func, delay = 1000) {
let timer = null;
return function () {
timer && clearTimeout(timer);
let that = this;
let args = arguments;
timer = setTimeout(function () {
func.apply(that, args);
}, delay);
};
}
什么是节流?
节流则是指在一定时间内,无论该事件被触发了多少次,都只执行一次操作。这样做可以避免因为事件被频繁触发导致性能问题,提高程序的效率。
/**
* @description 节流
* @author Amerss
* @param {Function} func 目标函数
* @param {number} delay 延迟时间(默认延迟1s)
* @return {Function}
*/
function throttle(func, delay = 1000) {
let flag = true;
return function () {
if (!flag) return;
let that = this;
let args = arguments;
timer = setTimeout(function () {
func.apply(that, args);
flag = true;
}, delay);
flag = false
};
}
防抖和节流的应用场景?
oninput 、onmousemove 、onscroll 、onresize 等事件
最后给大家留一个问题!!!大家回答可以留在评论区!
如果做一个到点秒杀的功能,更适合使用防抖还是节流呢?