前端開發中,「函數節流(throttle)」 和 「函數防抖(debounce)」 做爲經常使用的性能優化方法,二者都是用於優化高頻率執行 js 代碼的手段,那具體它們有什麼異同點呢?有對這兩個概念不太瞭解的小夥伴,能夠移步本人以前所寫的 JS進階篇1---函數節流(throttle) 和 JS進階篇2---函數防抖(debounce)。前端
你們都知道,液晶顯示器的屏幕刷新率一般爲 60Hz ,即每秒屏幕內容刷新 60 次,那爲何是 60 次,而不是 30 次,或者 90 次呢?這是由於,當液晶顯示器的屏幕刷新率爲 60Hz 的時候(這裏只討論液晶顯示器),人肉眼不再能察覺出屏幕的閃爍現象,低於這個刷新頻率畫面會有卡頓現象,而高於這個頻率的話,又會形成額外的資源和能源浪費,所以,液晶顯示器的默認屏幕刷新率爲 60Hz。segmentfault
同理,在前端開發過程當中,有一些會被高頻觸發的事件,例如 resize、scroll、mousemove 等,但有些時候咱們並不但願在事件持續觸發的過程當中那麼頻繁地去執行函數,達到必定頻率就足夠了,由於超過這個頻率以後,不管代碼執行多少次,帶來的效果也是同樣,因此倒不如把 js 代碼的執行次數控制在合理的範圍。這樣既能夠節省計算機資源,又能夠保證瀏覽的流暢性,這就是 「函數節流」 和 「函數防抖」 要解決的問題。瀏覽器
「函數節流」 使用場景緩存
「函數防抖」 使用場景性能優化
不論是 「函數節流」 仍是 「函數防抖」,都是用來進行性能優化的方式,也都是在項目開發過程當中,爲了解決開發中的實際問題而慢慢發展而來的,必定要在合適的場合才用正確的方法使用它們,切忌濫用,否則不只不會發揮它們該有的做用,還會影響代碼執行的正確性。有疑問或者建議,記得在評論區提出哦,歡迎留言!函數