在前端項目中,函數的防抖和節流應該算是身爲一名合格的前端工程師必須掌握的知識了。前端
函數節流(throttle)與函數防抖(debounce)都是能夠限制函數的執行頻次,根據不一樣的場景來對執行頻率進行限制,避免了函數觸發頻率太高致使的響應速度跟不上觸發頻率,出現延遲,假死或卡頓的現象。canvas
1.防抖通常咱們在搜索過濾功能中應用較多,若是隻是監聽搜索框的變化來搜索那搜索的頻率會太高,致使頁面抖動。所以咱們須要限制搜索次數,等到輸入最後一次(也多是中間暫停的某次)間隔0.5秒後在執行搜索,這樣就能控制搜索的頻率了。瀏覽器
2.表單重複提交前端工程師
3.滾動刷新
實例代碼1:閉包
var timer = null function debounce(fn,time){ //觸發頻率小於500ms是則清除上次未執行的 clearTimeout(time) setTimeout(function(){ console.log('====執行=====') fn() },time) } //監聽搜索input change事件 element.addEventListener("input", function(event) { debounce(searchFunc,500) }) //搜索 searchFunc(){ console.log('====serch=====') }
實例代碼2-閉包實現:前端優化
//待完善
節流的應用函數
1.canvas畫筆功能優化
2.頁面元素的拖拽code
實例代碼1:事件
var startTime = 0 function throttle(fn,time){ let nowTime = (new Date()).valueOf() if(nowTime-startTime > time){ fn() startTime = nowTime } } document.addEventListener("mousemove",function(){ //每隔1秒執行一次drag throttle(drag(),1000) }); function drag(){ console.log('=====執行=====') }
實例代碼2-閉包實現:
//待完善
在頁面負載比較大的狀況下,如何減小對瀏覽器內存的消耗是前端優化的必需要考慮到的。而防抖與節流的概念可讓咱們極大的節約對瀏覽器內存的消耗,因此掌握防抖與節流是前端必備技能之一。