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