更智慧的JavaScript回撥函式解析

edithfang發表於2014-12-17
由於某種原因,有兩個漂亮函式的概念並不被很多人所知,這就是分別現存於Underscore庫和LoDash庫,被稱為debounce和throttle的兩個函式。
 
當你在一個時間已經停止發生而你想執行一個動作時,第一個函式會特別有用。例如,一個markdown預覽工具可能想在使用者停止輸入後要等一秒,才能真正的把文字解析到markdown。debounce能夠接受一個函式並且返回一個新函式,這個新函式會根據Underscore文件中記錄的從上次呼叫這個函式起到目前為止所耗費的時間,並將延遲它在等待毫秒級的時間後才執行。
 
如果你不想僅僅為了這個函式而包含整個庫,你可以使用這個小技巧,使用用一個debounce的改編版本就好了。
 
我想談論的第二個函式是throttle,這個函式能接受一個函式作為引數,並在返回一個新函式,這個函式“當被重複呼叫的時候,將實際上在每次毫秒級的等待中至多隻呼叫原函式一次”。這點對於發生的太快的事件真的特別有用,因為使用這個函式我們就能夠限制呼叫它的頻率,比如對調整大小和滾動事件來說就是這樣的。
 
另外,如果你必須愛那個包含這個函式庫,同樣也有一個throttle的改編版本。
 
函式使用例項
       
下面就讓我們來看看在規則的jQuery javascript裡面這些函式被用到的例子:

// Let's make sure we don't computate stuff too often

// by calling the event handler at most once every 500ms

$(window).resize(throttle(function (e) {

  /* event handling code in here */

}, 500));

總結
       
正如大家所見,開始使用這些函式實際上非常容易,通過使用它們你極有可能會體驗到你正在開發的Web應用整體UI響應性的顯著提升。這兩個函式是前端開發者很實用的工具,但是要記住:“當你有一把錘子的時候,一切看起來都像是釘子”,儘管誤用它們是比較難的,但還是要明智的使用它們吧。
來自:PHP100
評論(1)

相關文章