摘要:函數(shù)節(jié)流保證如果電梯第一個人進來后,秒后準時運送一次,這個時間從第一個人上電梯開始計時,不等待,如果沒有人,則不運行。
前言
有一些瀏覽器事件我們不希望它很頻繁的觸發(fā),如調(diào)整窗口大小(onresize)、監(jiān)聽滾動條滾動(onscroll),如果這些監(jiān)聽事件需要調(diào)用接口的話一秒內(nèi)可能會調(diào)用上百次,這樣坑定是有問題的。
函數(shù)防抖(debounce)
如果有人進電梯(觸發(fā)事件),那電梯將在10秒鐘后出發(fā)(執(zhí)行事件監(jiān)聽器),這時如果又有人進電梯了(在10秒內(nèi)再次觸發(fā)該事件),我們又得等10秒再出發(fā)(重新計時)。
function debounce(fn,wait){ var timer = null; return function(){ clearTimeout(timer) timer = setTimeout(()=>{ fn() },wait) } } function log(){ console.log(1) } window.addEventListener("scroll", debounce(log, 1000));
函數(shù)節(jié)流(throttle)
保證如果電梯第一個人進來后,10秒后準時運送一次,這個時間從第一個人上電梯開始計時,不等待,如果沒有人,則不運行。
仔細想想,上面的防抖方式還是有一定的缺點。如果頁面很長,我們一直在滾動頁面,那log方法就一直不會被執(zhí)行。所以我們可以升級一下上述的防抖方法。
function throttle(fn,wait,time){ var previous = null; //記錄上一次運行的時間 var timer = null; return function(){ var now = +new Date(); if(!previous) previous = now; //當(dāng)上一次執(zhí)行的時間與當(dāng)前的時間差大于設(shè)置的執(zhí)行間隔時長的話,就主動執(zhí)行一次 if(now - previous > time){ clearTimeout(timer); fn(); previous = now;// 執(zhí)行函數(shù)后,馬上記錄當(dāng)前時間 }else{ clearTimeout(timer); timer = setTimeout(function(){ fn(); },wait); } } } function log(){ console.log(1) } window.addEventListener("scroll", throttle(log, 1000, 2000));
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/108070.html
摘要:文章來源詳談防抖和節(jié)流輕松理解函數(shù)節(jié)流和函數(shù)防抖函數(shù)防抖和節(jié)流好啦,今天的小菊花課堂之的防抖與節(jié)流的內(nèi)容就告一段落啦,感各位能耐心看到這里。 前言 陸游有一首《冬夜讀書示子聿》——古人學(xué)問無遺力,少壯工夫老始成。紙上得來終覺淺,絕知此事要躬行。,其中的意思想必大家都能明白,在學(xué)習(xí)或工作中,不斷的印證著這首詩的內(nèi)涵。所以,又有了此篇小菊花文章。 詳解 在前端開發(fā)中,我們經(jīng)常會碰到一些會持...
摘要:文章來源詳談防抖和節(jié)流輕松理解函數(shù)節(jié)流和函數(shù)防抖函數(shù)防抖和節(jié)流好啦,今天的小菊花課堂之的防抖與節(jié)流的內(nèi)容就告一段落啦,感各位能耐心看到這里。 前言 陸游有一首《冬夜讀書示子聿》——古人學(xué)問無遺力,少壯工夫老始成。紙上得來終覺淺,絕知此事要躬行。,其中的意思想必大家都能明白,在學(xué)習(xí)或工作中,不斷的印證著這首詩的內(nèi)涵。所以,又有了此篇小菊花文章。 詳解 在前端開發(fā)中,我們經(jīng)常會碰到一些會持...
摘要:函數(shù)防抖簡單實現(xiàn)模擬請求獲取函數(shù)的作用域和變量清除定時器節(jié)流名詞解釋連續(xù)執(zhí)行函數(shù),每隔一定時間執(zhí)行函數(shù)。效果函數(shù)防抖是某一段時間內(nèi)只執(zhí)行一次函數(shù)節(jié)流是間隔時間執(zhí)行,不管事件觸發(fā)有多頻繁,都會保證在規(guī)定時間內(nèi)一定會執(zhí)行一次真正的事件處理函數(shù)。 防抖(debounce) 名詞解釋:在事件被觸發(fā)n秒后再執(zhí)行回調(diào)函數(shù),如果在這n秒內(nèi)又被觸發(fā),則重新計時。 使用場景:以百度輸入框例,比如你要查詢...
摘要:封裝方法也比較簡單,書中對此問題也進行了處理使用定時器,讓函數(shù)延遲秒后執(zhí)行,在此秒內(nèi),然后函數(shù)再次被調(diào)用,則刪除上次的定時器,取消上次調(diào)用的隊列任務(wù),重新設(shè)置定時器。 在實際開發(fā)中,函數(shù)一定是最實用最頻繁的一部分,無論是以函數(shù)為核心的函數(shù)式編程,還是更多人選擇的面向?qū)ο笫降木幊?,都會有函?shù)的身影,所以對函數(shù)進行深入的研究是非常有必要的。 函數(shù)節(jié)流 比較直白的說,函數(shù)節(jié)流就是強制規(guī)定一...
摘要:隆重請出主角防抖與節(jié)流。防抖與節(jié)流的異同相同都是防止某一時間段內(nèi),函數(shù)被頻繁調(diào)用執(zhí)行,通過時間頻率控制,減少回調(diào)函數(shù)執(zhí)行次數(shù),來實現(xiàn)相關(guān)性能優(yōu)化。參考文章分鐘理解的節(jié)流防抖及使用場景函數(shù)防抖和節(jié)流 showImg(https://segmentfault.com/img/bVburM8?w=800&h=600); 本篇課題,或許早已是爛大街的解讀文章。不過春招系列面試下來,不少伙伴們還...
摘要:防抖與節(jié)流源碼學(xué)習(xí)最近自己擼了一個輪播圖,在點擊切換的時候,為了尋求更好的用戶體驗,引入了節(jié)流,在此記錄對源碼的學(xué)習(xí)過程源碼來源防抖函數(shù)防抖使用場景現(xiàn)在我們需要做一個搜索框,當(dāng)用戶輸入文字,執(zhí)行事件的時候,需要發(fā)出異步請求去進行結(jié)果查詢。 防抖與節(jié)流(源碼學(xué)習(xí)) 最近自己擼了一個輪播圖,在點擊切換的時候,為了尋求更好的用戶體驗,引入了節(jié)流,在此記錄對源碼的學(xué)習(xí)過程源碼來源:unders...
閱讀 3480·2021-10-08 10:15
閱讀 6113·2021-09-23 11:56
閱讀 1511·2019-08-30 15:55
閱讀 490·2019-08-29 16:05
閱讀 2775·2019-08-29 12:34
閱讀 2082·2019-08-29 12:18
閱讀 955·2019-08-26 12:02
閱讀 1703·2019-08-26 12:00