摘要:函數(shù)節(jié)流保證如果電梯第一個人進來后,秒后準時運送一次,這個時間從第一個人上電梯開始計時,不等待,如果沒有人,則不運行實現(xiàn)函數(shù)防抖函數(shù)節(jié)流仔細想想,上面的防抖方式還是有一定的缺點。
概念
函數(shù)防抖(debounce)
當調用動作過n毫秒后,才會執(zhí)行該動作,若在這n毫秒內又調用此動作則將重新計算執(zhí)行時間
函數(shù)節(jié)流(throttle)
預先設定一個執(zhí)行周期,當調用動作的時刻大于等于執(zhí)行周期則執(zhí)行該動作,然后進入下一個新周期
函數(shù)節(jié)流(throttle)與 函數(shù)防抖(debounce)都是為了限制函數(shù)的執(zhí)行頻次,以優(yōu)化函數(shù)觸發(fā)頻率過高導致的響應速度跟不上觸發(fā)頻率,出現(xiàn)延遲,假死或卡頓的現(xiàn)象。
比如如下的情況:
區(qū)別window對象的resize、scroll事件
拖拽時的mousemove事件
文字輸入、自動完成的keyup事件
可以拿我們平時坐電梯為例來形象地表述二者的區(qū)別
函數(shù)防抖:如果有人進電梯(觸發(fā)事件),那電梯將在10秒鐘后出發(fā)(執(zhí)行事件監(jiān)聽器),這時如果又有人進電梯了(在10秒內再次觸發(fā)該事件),我們又得等10秒再出發(fā)(重新計時)。實現(xiàn) 函數(shù)防抖(debounce)函數(shù)節(jié)流 :保證如果電梯第一個人進來后,10秒后準時運送一次,這個時間從第一個人上電梯開始計時,不等待,如果沒有人,則不運行
function _debounce(fn,wait){ var timer = null; return function(){ clearTimeout(timer) timer = setTimeout(()=>{ fn() },wait) } } function _log(){ console.log(1) } window.onscroll = _debounce(_log,500)函數(shù)節(jié)流(throttle)
仔細想想,上面的防抖方式還是有一定的缺點。如果頁面很長,我們一直在滾動頁面,那_log方法就一直不會被執(zhí)行。所以我們可以升級一下上述的防抖方法。
function _throttle(fn,wait,time){ var previous = null; //記錄上一次運行的時間 var timer = null; return function(){ var now = +new Date(); if(!previous) previous = now; //當上一次執(zhí)行的時間與當前的時間差大于設置的執(zhí)行間隔時長的話,就主動執(zhí)行一次 if(now - previous > time){ clearTimeout(timer); fn(); previous = now;// 執(zhí)行函數(shù)后,馬上記錄當前時間 }else{ clearTimeout(timer); timer = setTimeout(function(){ fn(); },wait); } } } function _log(){ console.log(1) } window.onscroll = _debounce(_log,500,2000)
其實,這就實現(xiàn)了我們的函數(shù)節(jié)流。趕快打開控制臺運行一下吧~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/82120.html
摘要:若時間差大于間隔時間,則立刻執(zhí)行一次函數(shù)。不同點函數(shù)防抖,在一段連續(xù)操作結束后,處理回調,利用和實現(xiàn)。函數(shù)防抖關注一定時間連續(xù)觸發(fā)的事件只在最后執(zhí)行一次,而函數(shù)節(jié)流側重于一段時間內只執(zhí)行一次。 原博客地址,歡迎star 函數(shù)防抖和節(jié)流 函數(shù)防抖和函數(shù)節(jié)流:優(yōu)化高頻率執(zhí)行js代碼的一種手段,js中的一些事件如瀏覽器的resize、scroll,鼠標的mousemove、mouseover...
摘要:隆重請出主角防抖與節(jié)流。防抖與節(jié)流的異同相同都是防止某一時間段內,函數(shù)被頻繁調用執(zhí)行,通過時間頻率控制,減少回調函數(shù)執(zhí)行次數(shù),來實現(xiàn)相關性能優(yōu)化。參考文章分鐘理解的節(jié)流防抖及使用場景函數(shù)防抖和節(jié)流 showImg(https://segmentfault.com/img/bVburM8?w=800&h=600); 本篇課題,或許早已是爛大街的解讀文章。不過春招系列面試下來,不少伙伴們還...
摘要:基礎防抖我們現(xiàn)在寫一個最基礎的防抖處理標記事件也做如下改寫現(xiàn)在試一下,我們會發(fā)現(xiàn)只有我們停止?jié)L動秒鐘的時候,控制臺才會打印出一行隨機數(shù)。 為何要防抖和節(jié)流 有時候會在項目開發(fā)中頻繁地觸發(fā)一些事件,如 resize、 scroll、 keyup、 keydown等,或者諸如輸入框的實時搜索功能,我們知道如果事件處理函數(shù)無限制調用,會大大加重瀏覽器的工作量,有可能導致頁面卡頓影響體驗;后臺...
摘要:文章來源詳談防抖和節(jié)流輕松理解函數(shù)節(jié)流和函數(shù)防抖函數(shù)防抖和節(jié)流好啦,今天的小菊花課堂之的防抖與節(jié)流的內容就告一段落啦,感各位能耐心看到這里。 前言 陸游有一首《冬夜讀書示子聿》——古人學問無遺力,少壯工夫老始成。紙上得來終覺淺,絕知此事要躬行。,其中的意思想必大家都能明白,在學習或工作中,不斷的印證著這首詩的內涵。所以,又有了此篇小菊花文章。 詳解 在前端開發(fā)中,我們經常會碰到一些會持...
摘要:文章來源詳談防抖和節(jié)流輕松理解函數(shù)節(jié)流和函數(shù)防抖函數(shù)防抖和節(jié)流好啦,今天的小菊花課堂之的防抖與節(jié)流的內容就告一段落啦,感各位能耐心看到這里。 前言 陸游有一首《冬夜讀書示子聿》——古人學問無遺力,少壯工夫老始成。紙上得來終覺淺,絕知此事要躬行。,其中的意思想必大家都能明白,在學習或工作中,不斷的印證著這首詩的內涵。所以,又有了此篇小菊花文章。 詳解 在前端開發(fā)中,我們經常會碰到一些會持...
摘要:函數(shù)防抖簡單實現(xiàn)模擬請求獲取函數(shù)的作用域和變量清除定時器節(jié)流名詞解釋連續(xù)執(zhí)行函數(shù),每隔一定時間執(zhí)行函數(shù)。效果函數(shù)防抖是某一段時間內只執(zhí)行一次函數(shù)節(jié)流是間隔時間執(zhí)行,不管事件觸發(fā)有多頻繁,都會保證在規(guī)定時間內一定會執(zhí)行一次真正的事件處理函數(shù)。 防抖(debounce) 名詞解釋:在事件被觸發(fā)n秒后再執(zhí)行回調函數(shù),如果在這n秒內又被觸發(fā),則重新計時。 使用場景:以百度輸入框例,比如你要查詢...
閱讀 850·2023-04-25 16:55
閱讀 2913·2021-10-11 10:59
閱讀 2156·2021-09-09 11:38
閱讀 1887·2021-09-03 10:40
閱讀 1545·2019-08-30 15:52
閱讀 1215·2019-08-30 15:52
閱讀 1037·2019-08-29 15:33
閱讀 3555·2019-08-29 11:26