在 JavaScript 中,防抖(debounce)和节流(throttle)是两种常用的优化高频率触发事件的技术。它们都可以提高性能,但应用场景和实现方式有所不同。以下是一些关于防抖和节流的最佳实践:
防抖的核心思想是在事件被连续触发后,只执行最后一次触发的操作。适用于如输入框实时搜索、窗口大小调整等场景。
最佳实践:
function debounce(func, wait) {
let timeout;
return function (...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), wait);
};
}
节流的核心思想是在一段固定的时间内,只执行一次目标函数。适用于如滚动加载、鼠标移动等场景。
最佳实践:
function throttle(func, wait) {
let lastTime = 0;
return function (...args) {
const context = this;
const nowTime = Date.now();
if (nowTime - lastTime > wait) {
func.apply(context, args);
lastTime = nowTime;
}
};
}
在某些场景下,可以将防抖和节流结合使用,以达到更好的性能优化效果。例如,在滚动加载时,可以使用节流来控制触发频率,而在输入框实时搜索时,可以使用防抖来确保只在用户停止输入一段时间后才执行搜索操作。