av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

如何理解JS函數防抖和函數節流

瀏覽:108日期:2024-03-25 16:15:10
目錄概述1. 函數防抖(debounce)2. 函數節流(throttle)概述

函數防抖和函數節流都是定義一個函數,該函數接收一個函數作為參數,并返回一個添加了防抖或節流功能后的函數。

因此可以將函數防抖和函數節流看作是一個函數工廠,負責對傳進來的函數進行相應的加工改造,然后產出一個新的帶有某種功能的函數。

函數防抖是某一時間內只執行一次,而函數節流是間隔時間執行

假如有這樣一個場景:在某一頁面,有一個按鈕是 '加載更多',這個按鈕的作用就是使用 ajax 從后端服務器請求更多的數據展示在頁面,我們都知道,ajax 請求的響應是一個異步的,會存在一定的響應時間,如果用戶在點擊了該按鈕后,立馬又點擊了一下該按鈕,按照常規回調函數的操作,回調函數會立馬又執行一次,那么就是用戶短時間內點擊了兩次 '加載更多' 按鈕后就會執行回調函數向后端發起了兩次一模一樣的 ajax 請求,服務器會一一接收請求并處理返回數據,短時間內兩次請求還好,如果用戶連續點擊了 n 次 '加載更多' 按鈕呢?那就會短時間內向服務器發送了 n 次一模一樣的請求,每次后端處理 ajax 請求后返回數據后頁面就會重新再渲染一次,盡管內容沒有改變,這樣就會帶來性能上的問題,不僅為服務器帶去了壓力,也為瀏覽器帶來了不必要的渲染,這就是函數頻繁執行帶來的副作用。

那么如何設置這個按鈕的點擊事件回調函數才能減少該函數頻繁執行帶來的副作用呢?

1. 函數防抖(debounce)

函數防抖的設計思路就是在函數執行前加一個等待時間,在這個等待時間內如果該函數又需要執行一次,就重新計算等待時間,再次等待,依次類推,直到等待時間到了,還沒有等到函數又需要執行的情況,才會執行這個函數。

就拿上述的場景來說,假設向后臺發送 ajax 請求的響應時間大概是在 2s 左右,那就設置這個等待時間為 2s,當用戶第一次點擊'加載更多'按鈕后,該回調函數并沒有立即執行,也就是還沒有開始發送 ajax,此時該函數在等待,如果在 2s 內用戶又點擊了'加載更多',那就重新計算等待時間,再等待 2s ,此時 2s 過去了,用戶沒再第三次點擊'加載更多'按鈕了,那么該函數就開始執行了,向后端發送 ajax 請求了。

函數防抖實現方式如下:

function debounce(fn, delay){ let timeId = null return function(){let context = thisif(timeId){window.clearTimeout(timeId)}timeId = setTimeout(()=>{ fn.apply(context, arguments) timeId = null},delay) }}2. 函數節流(throttle)

函數節流的設計思路是在函數執行后加一個冷卻時間,函數在第一次執行時是立馬執行,但在其執行完后設置一個冷卻時間,在冷卻時間內,該函數不能再次執行,直到冷卻時間結束允許該函數執行了,才可以再次執行。

就拿上述的場景來說,冷卻時間假設也設置為 2s,在用戶第一次點擊'加載更多' 后按鈕的回調函數就會執行,也就是會向后臺發送 ajax 請求,此時用戶又立馬再次點擊了'加載更多'按鈕,由于此刻 2s 的冷卻時間還沒有到,那么就會給第二次的函數執行加上一個延遲執行。

function throttle(fn, delay){ let canUse = true return function(){if(canUse){ fn.apply(this, arguments) canUse = false setTimeout(()=>canUse=true, delay)} }}

以上就是如何理解JS函數防抖和函數節流的詳細內容,更多關于JS函數防抖和函數節流的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 国产一区二区视频在线观看 | 日韩成人在线免费视频 | 精品一区二区三 | 亚洲午夜网 | 91国内精精品久久久久久婷婷 | 影音先锋久久 | 亚洲一区精品视频 | 成人免费视频观看视频 | www.国产 | 日本高清视频在线播放 | 欧美综合一区 | 99视频在线看 | 精品久久影院 | 国产69久久精品成人看动漫 | 日韩精品一区二区三区 | 国产ts人妖系列高潮 | 九九亚洲 | 丝袜美腿一区二区三区动态图 | 亚洲一区视频在线 | 狠狠干网站 | 一区二区三区在线观看免费视频 | 好姑娘高清在线观看电影 | 久久99一区二区 | 一级大黄色片 | 一区二区三区四区在线视频 | www.国产精| 97精品超碰一区二区三区 | 国产色| 欧美久久一区二区 | 久久精品色欧美aⅴ一区二区 | 亚洲精品在线免费观看视频 | 一级毛片在线播放 | 91精品国产综合久久久久久丝袜 | 青青草华人在线视频 | 亚洲精品中文字幕中文字幕 | 精品久久一区二区 | 日韩中文字幕免费在线 | 精品综合在线 | 欧美三级在线 | 久久99精品久久久久婷婷 | 91精品久久久久久久久中文字幕 |