JavaScript效能最佳化之節流(throttle)函式的實現

JavaScript效能最佳化之節流(throttle)函式的實現

一到公司小白就熱情的湊過來,興奮的說:“昨天我一個同學去面試前端崗位,面試官讓她實現一個防抖函式,她沒寫出來,巧了你剛教過我,我就告訴她了,他現在對我很崇拜,約我今天晚上一起吃飯,說是還要在請教一些前端技巧!”

麥克微微一笑:“那你準備再教她點什麼?”

“額~還沒想好!”

“那不如就再告訴他節流函式實現方式吧”

“還有節流函式?”

“是的,一般面試過程中,面試官都會把這兩個函式一起提出,讓面試者回答,估算是她沒回答出防抖函式,所以面試官也就沒有再問她節流(throttle)函式的實現方式。”

“好啊,快給我講講!”

JavaScript效能最佳化之節流(throttle)函式的實現

姜小白

節流(throttle)函式

就是指連續觸發事件但是在 n 秒中只執行一次函式。節流會減少函式的執行頻率。

一般的使用場景是事件觸發頻率非常高的時候。如:

當使用window。onresize進行視窗縮放時

當使用mousemove 事件時

監聽鍵盤事件時。

“那感覺和防抖的作用好像也什麼區別啊?”

“作用差不多,但還是有一些區別的,

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

。”

多說無益,實踐出真知,且看程式碼:

JavaScript效能最佳化之節流(throttle)函式的實現

我們就用節流(throttle)來對這個對這個函式進行效能最佳化。

首先編寫throttle函式:

JavaScript效能最佳化之節流(throttle)函式的實現

然後使用它:

JavaScript效能最佳化之節流(throttle)函式的實現

“感覺和防抖差不多啊!”

“是的,區別就在於clearTimeout函式執行的時機不一樣。”

可複製程式碼:

<!DOCTYPE html> Document

總結

防抖和節流都是為了解決在短時間事件觸發頻率高的問題,目前都是為了減少請求,提高頁面的效能。

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