在 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;
}
};
}
在某些場景下,可以將防抖和節流結合使用,以達到更好的性能優化效果。例如,在滾動加載時,可以使用節流來控制觸發頻率,而在輸入框實時搜索時,可以使用防抖來確保只在用戶停止輸入一段時間后才執行搜索操作。