一到公司小白就熱情的湊過來,興奮的說:“昨天我一個同學去面試前端崗位,面試官讓她實現一個防抖函式,她沒寫出來,巧了你剛教過我,我就告訴她了,他現在對我很崇拜,約我今天晚上一起吃飯,說是還要在請教一些前端技巧!”
麥克微微一笑:“那你準備再教她點什麼?”
“額~還沒想好!”
“那不如就再告訴他節流函式實現方式吧”
“還有節流函式?”
“是的,一般面試過程中,面試官都會把這兩個函式一起提出,讓面試者回答,估算是她沒回答出防抖函式,所以面試官也就沒有再問她節流(throttle)函式的實現方式。”
“好啊,快給我講講!”
姜小白
節流(throttle)函式
就是指連續觸發事件但是在 n 秒中只執行一次函式。節流會減少函式的執行頻率。
一般的使用場景是事件觸發頻率非常高的時候。如:
當使用window。onresize進行視窗縮放時
當使用mousemove 事件時
監聽鍵盤事件時。
“那感覺和防抖的作用好像也什麼區別啊?”
“作用差不多,但還是有一些區別的,
防抖動是將多次執行變為最後一次執行,節流是將多次執行變成每隔一段時間執行
。”
多說無益,實踐出真知,且看程式碼:
我們就用節流(throttle)來對這個對這個函式進行效能最佳化。
首先編寫throttle函式:
然後使用它:
“感覺和防抖差不多啊!”
“是的,區別就在於clearTimeout函式執行的時機不一樣。”
可複製程式碼:
<!DOCTYPE html>
總結
防抖和節流都是為了解決在短時間事件觸發頻率高的問題,目前都是為了減少請求,提高頁面的效能。
防抖動是將多次執行變為最後一次執行,節流是將多次執行變成每隔一段時間執行。