函數節流與函數去抖
阿新 • • 發佈:2018-11-23
ebo settime 繼續 ava set 瀏覽器 true 無響應 js函數
函數節流與函數去抖都是為了解決密集的js函數運行問題。怎麽分析和使用兩種情況呢?
函數節流:
是指函數在一段時間執行一次,即降低函數運行的頻率。比如說,在onmousemove時,進行一次dom操作,如果長時間的onmousemove,這樣所觸發回調數量是大量的,因為進行了大量的dom操作,可能導致瀏覽器無響應。這時候就可以聽過函數節流,使一段時間觸發一次回調函數,大大降低了消耗。
var ifRun = true; function run () { if (!ifRun) { return; } ifRun = false; ``` do sth ``` setTimeOut(() => {ifRun = true},300); }
dom.onmousemove = run();
1.設置一個標識,用來判斷是否執行函數。
2.在觸發函數時,如果不到所期望的時間,return,不繼續執行函數。相反,將標識置反,並進行相應的業務代碼。最後設置一個定時器,通過定時器,將標識置為true。
函數去抖(防抖):
函數僅執行一次,在等待間隔內觸發函數時,更新等待時間。舉個栗子??,常見的輸入框校驗,如果監聽onkeyup事件,發起校驗請求。實際上浪費了資源,因為我們所期望的是在輸入完畢後進行校驗。那麽就可以通過函數去抖來實現。
var timer = false; function debounce() { clearTimeOut(timer); timer= setTimeOut(() => { ``` do sth ``` } }
通過設置timeout,進行操作。調用函數是,首先清楚已經存在的timer,並重新設置。
函數節流與函數去抖