遇到的問題

在開發(fā)過程中會(huì)遇到頻率很高的事件或者連續(xù)的事件,如果不進(jìn)行性能的優(yōu)化,就可能會(huì)出現(xiàn)頁面卡頓的現(xiàn)象,比如:

  1. 鼠標(biāo)事件:mousemove(拖曳)/mouseover(劃過)/mouseWheel(滾屏)

  2. 鍵盤事件:keypress(基于ajax的用戶名唯一性校驗(yàn))/keyup(文本輸入檢驗(yàn)、自動(dòng)完成)/keydown(游戲中的射擊)

  3. window的resize/scroll事件(DOM元素動(dòng)態(tài)定位)

為了解決這類問題,常常使用的方法就是throttle(節(jié)流)debounce(去抖)。throttle(節(jié)流)和debounce(去抖)都是用來控制某個(gè)函數(shù)在一定時(shí)間內(nèi)執(zhí)行多少次的解決方案,兩者相似而又不同。

下面就具體的看看兩者的相似和區(qū)別。

認(rèn)識(shí)throttle和debounce

throttle和debounce的作用就是確認(rèn)事件執(zhí)行的方式和時(shí)機(jī),以前總是不太清楚兩者的區(qū)別,容易把二者弄混。

下面就通過兩個(gè)簡(jiǎn)單的場(chǎng)景描述一下debounce和throttle,以后想到這兩個(gè)場(chǎng)景就不會(huì)再弄混了:

debounce假設(shè)你正在乘電梯上樓,當(dāng)電梯門關(guān)閉之前發(fā)現(xiàn)有人也要乘電梯,禮貌起見,你會(huì)按下開門開關(guān),然后等他進(jìn)電梯; 如果在電梯門關(guān)閉之前,又有人來了,你會(huì)繼續(xù)開門;這樣一直進(jìn)行下去,你可能需要等待幾分鐘,最終沒人進(jìn)電梯了,才會(huì)關(guān)閉電梯門,然后上樓。

所以debounce的作用是,

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式