throttle 節流函式解析記錄

2021-08-20 22:05:33 字數 1499 閱讀 3068

最近在看vue的 lazyload外掛程式,裡面用到了節流函式。對這一塊不太了解,所以開始學習節流函式loadsh的原始碼,做乙個記錄吧,多做總結總是好的。

loadsh節流函式的api是這樣的: _.throttle(func, wait, options);

節流函式的作用,其實就是和名字一樣,限制某些功能函式的呼叫次數,或者起到延遲呼叫的效果。比如onmousemove、onkeyup、onresize等事件的監聽函式,呼叫過於頻繁時,可能會導致瀏覽器崩潰,節流函式可以有效的防止太過頻繁的呼叫。

/** @param function func 要進行節流的函式

* @param number wait 想要的時間間隔

* @param object options 

* options.leading === true時,當第一次呼叫返回值函式時,立刻呼叫func;值是false時,執行返回值方法時會記錄當前時間,當第二次呼叫時的時間間隔超過了wait,才呼叫func。

* options.trailing === true, 當執行返回值方法時,如果未達到wait的時間間隔,則啟動延時呼叫func函式。值是false時,則不作處理,需要超過wait時間以後呼叫才有效。

var throttle =

function(

func,

wait,

options)

if (

object.

prototype.

tostring.

call(

options) ===

'[object object]')

letresult =

null;

lettimer =

null;

letprevious =

0;return

function()

//計算是否超過了wait時間間隔

const

remain =

wait - (

now -

previous);

//如果超過了wait或者now小於previous,也就是手動修改時間的話,就立即執行func

if (

remain

<=

0 ||

remain >

wait)

result =

func.

this,

arguments);

previous = +

newdate(); }

//如果未超過wait,但是trailing是true的話,則開啟延遲呼叫

else

if (

remain >

0 &&

_options.

trailing) ,

remain);

previous = +

newdate(); }

}return

result; }

函式節流(throttle)

函式節流的目的,是為了防止在不間斷的時間裡,重複執行某個函式。比如瀏覽器的onresize事件,如果我們在這個函式中操作了dom元素,那麼對cpu的開銷是非常大的。所以為了防止這種情況的出現,函式節流起到了很好的作用。1 2 函式節流方法 3 param delay 延遲delay毫秒後,執行fn函...

js函式節流(Throttle)

在瀏覽器 dom 事件裡面,有一些事件會隨著使用者的操作不間斷觸發。比如 重新調整瀏覽器視窗大小 resize 瀏覽器頁面滾動 scroll 滑鼠移動 mousemove 也就是說使用者在觸發這些瀏覽器操作的時候,如果指令碼裡面繫結了對應的事件處理方法,這個方法就不停的觸發。而當事件處理比較複雜的時...

前端效能優化 節流(throttle)

一 定義 乙個函式執行一次後,在只有大於設定的執行週期後才執行第二次,假設有個需要頻繁觸發的函式,處於效能優化角度,在規定的時間內,只讓函式的第一次生效,後面的不生效,大於設定時間後,再生效。二 使用場景 上拉載入,滾動條,等等 三 四 原理 根據上邊的 分析一下原理,其實就是設定了乙個開始時間st...