遇到的問題
在開發(fā)過程中會(huì)遇到頻率很高的事件或者連續(xù)的事件,如果不進(jìn)行性能的優(yōu)化,就可能會(huì)出現(xiàn)頁面卡頓的現(xiàn)象,比如:
鼠標(biāo)事件:mousemove(拖曳)/mouseover(劃過)/mouseWheel(滾屏)
鍵盤事件:keypress(基于ajax的用戶名唯一性校驗(yàn))/keyup(文本輸入檢驗(yàn)、自動(dòng)完成)/keydown(游戲中的射擊)
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í)是年輕人改變自己的最好方式