為什么要防抖節(jié)流沛善?
如 scroll、click蜕企、reload等高頻率的觸發(fā)事件咬荷,會過度損耗頁面性能,導致頁面卡頓轻掩,頁面抖動幸乒。有時我們不希望在事件持續(xù)觸發(fā)的過程中那么頻繁地去執(zhí),唇牧。此時防抖和節(jié)流是比較好的解決方案罕扎。
兩種策略的工作方式及區(qū)別
-
throttle
讓一個函數(shù)無法在很短的時間間隔內(nèi)連續(xù)調(diào)用,只有當上一次函數(shù)執(zhí)行后過了規(guī)定的時間間隔丐重,才能進行下一次該函數(shù)的調(diào)用
Throttle:好比一臺自動的飲料機腔召,按拿鐵按鈕,在出飲料的過程中扮惦,不管按多少這個按鈕臀蛛,都不會連續(xù)出飲料,中間按鈕的響應會被忽略崖蜜,必須要等這一杯的容量全部出完之后浊仆,再按拿鐵按鈕才會出下一杯。
常用于連續(xù)點擊按鈕只讓第一次生效豫领,用 throttle 操作符
-
debounce
觸發(fā)事件后函數(shù)不會立即執(zhí)行抡柿,而是在 n 秒后執(zhí)行,如果在 n 秒內(nèi)又觸發(fā)了事件等恐,則會重新計算函數(shù)執(zhí)行時間(n 秒內(nèi)連續(xù)點擊只會在n秒后執(zhí)行一次)
Debounce:一部電梯停在某一個樓層洲劣,當有一個人進來后,20秒后自動關門课蔬,這20秒的等待期間囱稽,又一個人按了電梯進來,這20秒又重新計算二跋,直到電梯關門那一刻才算是響應了事件战惊。
常用于搜索時文本不斷變化導致調(diào)用多次接口 或 頁面有多少個接口,每個接口獲取數(shù)據(jù)后需要刷新UI同欠,用 debounce 操作符即可