Throttle
定義: 在一段時間內只會執行一次觸發事件的回調 (callback) 函式,若在這之中又有新事件觸發,則不執行此回調函式
適合用在那些頻繁觸發的事件中,確保不會造成過多的性能損耗,特別是在使用者交互、DOM 操作以及網路請求等場景
使用場景
1. infinite scroll
2. 捲動事件(scroll)
3. 視窗調整大小事件(resize)
簡單版
lodash throttle 實作
無 leading trailing 版本
function throttle(func, wait) {
let accept = true;
let temp = null;
const run = () => {
setTimeout(() => { // 時間結束會做最後一次傳進 func 的參數
if(temp !== null) {
func(temp)
temp = null;
}
accept = true;
}, wait)
}
return (...args) => {
if(accept) {
accept = false
func(args); // 會先做一次
run()
} else {
temp = args; // 當在區間內重複呼叫 新的參數取代舊參數
}
}
}
有參數版
Last updated