手寫防抖throttle和節流debounce

2021-10-24 12:35:45 字數 1580 閱讀 6195

手寫節流throttle

節流和防抖的區別

若頁面中有乙個輸入框,我想根據輸入框的內容變化實時做出變化

那我該怎麼做呢?

那麼從效能優化的角度要怎麼做呢?

當使用者輸入結束或者暫停時,才會觸發 change 事件

這就是防抖

"text" id=

"input1"

>

const input1 = document.

getelementbyid

('input1');

function

debounce

(fn, delay =

500)

timer =

settimeout((

)=>

, delay);}

} input1.

addeventlistener

('keyup'

,debounce

(function()

,600))

;<

/script>

觸發高頻事件後n秒內函式只會執行一次,如果n秒內高頻事件再次被觸發,則重新計算時間。

也就是說

防抖策略是

將 高頻操作合併為一次執行,並且每次高頻 操作都清空定時器,只認最後一次操作。

若頁面中有乙個可拖拽的div

,當div繫結的觸發事件有很多時(可能有大於百個的事件),我想每隔固定的時間觸發一次,避免造成電腦卡頓。

那我該怎麼做呢?

那麼從效能優化的角度要怎麼做呢?

無論拖拽的速度有多快,都會 每隔 100ms(自定) 觸發一次

這就是節流

function

throttle

(fn, delay =

500)

timer =

settimeout((

)=>

, delay);}

}div1.

addeventlistener

('drag'

,throttle

(function

(e))

)

高頻事件觸發,在n秒內只會執行一次,所以節流會稀釋函式的執行頻率。

舉例:預定乙個函式只有在大於等於執行週期時才執行,週期內呼叫不執行。就好像你在**搶購某一件限量熱賣商品時,你不斷點重新整理點購買,可是總有一段時間你點 上是沒有效果,這裡就用到了節流,就是怕點的太快導致系統出現bug。

也就是說

節流策略是

將高頻操作按週期執行,乙個 timeout 週期內執行一次,如果第乙個週期執行完,有新的操作進來進行另乙個週期。

防抖是將多次執行變為最後一次執行, 節流是將多次執行變成每隔一段時間執行。

面試之手寫防抖節流

關注前端體驗或效能優化的應該有聽說過防抖,節流。那麼,什麼是防抖節流呢?概念在短時間內多次觸發同乙個函式,只執行最後一次。舉例 搭乘公交車的時候,陸續有不同的乘客上車,但師傅只會在最後乙個乘客上車後才關門。效果演示 防抖前防抖後 應用場景 實現簡單版本 function debounce fn,wa...

debounce 防抖和 throttle 節流

視窗的resize scroll,輸入框內容校驗等操作時,如果這些操作處理函式較為複雜或頁面頻繁重渲染等操作時,如果事件觸發的頻率無限制,會加重瀏覽器的負擔,導致使用者體驗非常糟糕。此時我們可以採用debounce 防抖 和throttle 節流 的方式來減少觸發的頻率,同時又不影響實際效果。deb...

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

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