手寫節流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按鈕的時候,將...