效能 防抖和節流

2021-09-16 20:54:05 字數 894 閱讀 1420

為了提高頁面效能,有時需要對高頻率觸發的事件(scrllo, resize, mousemove, touchmove)進行防抖(debounce)或者節流(throttle)處理。這兩個概念很相似,但是他們是不同的概念:

把一系列連續的事件,只處理一次,即只呼叫一次事件處理程式。強調一系列連續觸發的事件。

防抖中注意乙個問題:什麼是一系列事件?在指定時間間隔(距離上次觸發的時間)內觸發的相同型別事件視為乙個系列的事件。

如:假如scroll事件分別在0,1,3,7,8時間觸發了事件a,b,c,d,e。假如規定時間間隔為2,則a,b,c屬於乙個系列(d,c之間間隔為3);d,e屬於乙個系列。防抖的目的就是把a,b,c構成的系列(或者d,e構成的系列)事件合併成乙個,即只執行a或者c(d或者e)。

一段時間內的事件,只處理一次,即只呼叫一次事件處理程式。強調一段時間內。

根據上面的概念實現乙個簡單的**v1:

var debounce = function(func, delay);

if(timehandle)

timehandle = settimeout(later, delay);}}

功能如:

事件處理程式在一系列事件觸發後delay時間後執行。

根據概念實現各簡單的v1:

var throttle = function(func, delay)

console.log(curr)}}

具體實現可疑參考下其他庫,畢竟使用的人多,也更合理。

underscorejs

防抖demo:

效能優化 防抖和節流

在連續觸發的事件中,事件處理函式的頻繁呼叫會加重瀏覽器或伺服器的效能負擔導致使用者體驗糟糕,有哪些連續觸發的事件呢 比如,瀏覽器滾動條的滾動事件 瀏覽器視窗調節的resize事件 輸入框內容校驗以及在移動端的touchmove事件等 所以,我們將採用防抖函式 debounce 和節流函式 throt...

防抖和節流 什麼是防抖和節流

目錄二 節流 有這樣一種情況,想象有乙個表單,點選提交按鈕就傳送請求給伺服器。如果使用者在很短的時間間隔內 手抖 點選了多次,又或者是惡意點選,那麼就將傳送多個請求。該行為將造成伺服器額外的不必要負載。所謂防抖,實際上就是是處理這種常見的情況的描述。submit該段 當點選submit按鈕的時候,將...

JS效能優化 防抖和節流

防抖和節流嚴格算起來應該屬於效能優化的知識,但實際上遇到的頻率相當高,處理不當或者放任不管就容易引起瀏覽器卡死。舉個例子吧 監聽滾動條的高度 需求很簡單,直接寫 function showtop window.onscroll showtop 但是!你會發現只要你一改變高度,它就會列印一次高度,隨便...