1. 程式人生 > >函數節流與函數去抖

函數節流與函數去抖

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,並重新設置。

函數節流與函數去抖