最近在看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...