天天看點

函數防抖(Debounce)、函數節流 (Throttle)

  • 一篇介紹文章:https://zhuanlan.zhihu.com/p/38313717

    示範示例:http://demo.nimius.net/debounce_throttle/

函數防抖(Debounce)

  • 比較好的解釋:https://www.jianshu.com/p/3e8e31f99639
  • JavaScript專題之跟着underscore學防抖:https://github.com/mqyqingfeng/Blog/issues/22
  • 其實概念很簡單,就兩句話:

    第一句:函數執行過一次後,在等待時間内不能再次執行。

    第二句: 在等待時間内觸發此函數,則重新計算等待時間。

  • 換句通俗的話說,就是:你盡管觸發事件,但是我一定在事件觸發n秒後才執行,如果你在一個事件觸發的n秒内又觸發了這個事件,那我就以新的事件的時間為準,n秒後才執行,總之,就是要等你觸發完事件n秒内不再觸發事件,我才執行。
  • 如果不了解上面定義,我可以再給大家舉個生活例子:

    如果有人進電梯(觸發事件),那電梯将在10s出發(執行事件句柄),這時如果又有人進電梯了(在10s内再次觸發該事件),我們又得等10s再出發(重新計時)。這個例子很完美的展示了函數防抖的精髓。

函數節流 (Throttle):在某個時間段内,至多執行一次

  • JavaScript專題之跟着 underscore 學節流:https://github.com/mqyqingfeng/Blog/issues/26
  • 如果你持續觸發事件,每隔一段時間,隻執行一次事件;

    如果某個時間段内,沒有觸發事件,則不執行。

函數防抖和函數節流的差別是:函數防抖可能會被無限期的延遲。

繼續閱讀