當某些事件頻繁的被觸發的時候,那麼其對應的事件處理函式就會頻繁執行,會極大的浪費效能,那麼可以通過防抖和節流的方式對其進行控制以節省效能。
函式防抖和節流,都是控制事件觸發頻率的方法。應用場景有很多,如輸入框持續輸入,將輸入內容遠端校驗、多次觸發點選事件、onscroll、onmousemove、resize等等。
防抖
函式防抖,這裡的抖動就是執行的意思,而一般的抖動都是持續的,多次的。假設函式持續多次執行,我們希望讓它冷靜下來再執行。也就是當持續觸發事件的時候,函式是完全不執行的,等最後一次觸發結束的一段時間之後,再去執行。
具體做法是讓被頻繁觸發的任務延遲呼叫,每次觸發都清除上一次的延時器,這樣做的缺點是在一定的時間內如果頻繁呼叫的話該任務只能執行一次,不能達到實時觸發的效果。
function debounce(func, delay) , delay)}
}
節流
節流的意思是讓函式有節制地執行,而不是毫無節制的觸發一次就執行一次。什麼叫有節制呢?就是事件處理函式觸發一次,等待一定的時間之後,才會被允許再次觸發。可以理解為當事件處理函式被觸發後,就進入冷卻期,在冷卻期的時候無論如何觸發,都不執行,等冷卻期結束後,才可以再次被觸發。
function throttle(func, delay) , delay)} else
}}
總結
從**上看,我們發現防抖和節流都是在限制使用者的觸發頻率,它們都巧妙地用了settimeout,來控制函式執行的時機,優點很明顯,可以節約效能,不至於多次觸發複雜的業務邏輯而造成頁面卡頓。但不同的是:
假設事件處理函式一直在頻繁觸發的狀態下
防抖的方式會讓該事件處理函式一直不觸發,等頻繁觸發結束的一段時間之後僅觸發一次
節流的方式會讓該事件處理函式按照我們設定的時間,週期性的觸發
防抖和節流 什麼是防抖和節流
目錄二 節流 有這樣一種情況,想象有乙個表單,點選提交按鈕就傳送請求給伺服器。如果使用者在很短的時間間隔內 手抖 點選了多次,又或者是惡意點選,那麼就將傳送多個請求。該行為將造成伺服器額外的不必要負載。所謂防抖,實際上就是是處理這種常見的情況的描述。submit該段 當點選submit按鈕的時候,將...
防抖和節流
在前端開發過程中,我們經常需要繫結一些持續觸發事件,如 resize scroll mousemove等等,但有些時候我們並不希望在事件持續觸發的過程中那麼頻繁的去執行函式。通常這種情況下,我們怎麼去解決呢?一般來講,防抖和節流是比較好的解決方案。一 函式的防抖 1 什麼是函式防抖 函式防抖 deb...
防抖和節流
防抖和節流的作用都是防止函式多次呼叫。區別在於,假設乙個使用者一直觸發這個函式,且每次觸發函式的間隔小於設定的時間,防抖的情況下只會呼叫一次,而節流的情況會每隔一定時間呼叫一次函式。1.防抖 函式防抖 debounce n秒內函式只會執行一次,如果n秒內高頻事件再次被觸發,則重新計算時間。如下例,對...