節流與防抖

2022-07-05 14:48:13 字數 1132 閱讀 1871

節流和防抖,都是優化高頻率執行操作的有效手段。

功能:連續的事件,只在最後一次觸發時執行操作

應用場景:最常見的就是輸入框驗證,如:使用者註冊時候的手機號碼驗證或郵箱驗證。只有等使用者輸入完畢後,才檢查格式是否正確;搜尋框sug請求

防抖函式的實現

function debounce (fn, wait) , wait);

}}// 較為全面的debounce

function debounce (func, wait, immediate)

};let callnow = immediate && !timeout;

cleartimeout(timeout);

timeout = settimeout(later, wait);

if (callnow)

};}

功能:限制乙個行為在一定時間內只能執行一次。

應用場景:多數在監聽頁面元素滾動事件的時候會用到。因為滾動事件,是乙個高頻觸發的事件。

節流函式的實現

// 時間戳版

function throttle (fn, wait)

}}// settimeout 版

function throttle (fn, wait)

let context = this;

let args = arguments;

timer = settimeout(function () , wait);

}}// 較為完整版

function throttle (func, wait, options) ;

let later = function later() ;

let throttled = function throttled()

previous = now;

if (!timeout) context = args = null;

} else if (!timeout && options.trailing !== false)

return result;

};throttled.cancel = function () ;

return throttled;

}

節流與防抖

瀏覽器中某些計算和處理要比其他的昂貴,例如在瀏覽器中操作dom比非dom互動需要更多的記憶體和cpu的事件,連續嘗試進行過多的dom相關操作可能ui導致瀏覽器掛起,有時甚至會崩潰。尤其在ie中使用onresize事件處理程式的時候容易發生,當調整瀏覽器大小的時候,該事件會連續觸發。在onresize...

防抖與節流

防抖 當事件持續觸發,一定時間內沒有觸發事件函式處理一次。比如輸入框的ajax請求做模糊查詢 節流 當時間持續觸發,在一秒內只能觸發一次。比如滾動條持續向下滾動,載入更多資料 function debounce fn,wait function throttle func,delay functio...

節流與防抖

在實際開發中,我們經常會遇到一類需求 根據input輸入容來校驗或者搜尋資料,根據視窗的大小變化來進行相關操作等。如果事件操作函式跟使用者的操作保持實時同步,那麼當使用者的操作十分頻繁時,就會多出許多無用的事件操作,並加重瀏覽器的負擔,影響頁面的效能。這時我們可以採用debounce 防抖 和thr...