遇到的問題

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

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

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

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

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

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

認識throttle和debounce

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

下面就通過兩個簡單的場景描述一下debounce和throttle,以后想到這兩個場景就不會再弄混了:

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

所以debounce的作用是,

延伸閱讀

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