成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript:函數(shù)防抖與函數(shù)節(jié)流

elina / 1735人閱讀

摘要:函數(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ā),則重新計時。

使用場景:以百度輸入框例,比如你要查詢XXx,想實現(xiàn)輸完了XXx之后,再進行搜索請求,這樣可以有效減少請求次數(shù),節(jié)約請求資源。

函數(shù)防抖簡單實現(xiàn)


節(jié)流(throttle)

名詞解釋:連續(xù)執(zhí)行函數(shù),每隔一定時間執(zhí)行函數(shù)。規(guī)定一個單位時間,在這個單位時間內(nèi),只能有一次觸發(fā)事件的回調(diào)函數(shù)執(zhí)行,如果在同一個單位時間內(nèi)某事件被觸發(fā)多次,只有一次能生效。

使用場景:鼠標(biāo)連續(xù)多次click事件,mousemove 事件,監(jiān)聽滾動事件,比如是否滑到底部自動加載更多等等...

函數(shù)節(jié)流簡單實現(xiàn)

function throttle(fn, delay) {
    let lastTime; 
    let timer; 
    delay || (delay = 300); // 默認(rèn)間隔為300ms
    return function(arguments) {
        let context = this;
        let args = arguments;
        let nowTime = +new Date(); // 獲取系統(tǒng)當(dāng)前的時間
        if (lastTime && nowTime < lastTime+ delay) { // 當(dāng)前距離上次執(zhí)行的時間小于設(shè)置的時間間隔
            clearTimeout(timer); // 清除定時器
            timer = setTimeout(function() { // delay時間后,執(zhí)行函數(shù)
                lastTime= nowTime ;
                fn.apply(context, args);
            }, delay);
        } else { // 當(dāng)前距離上次執(zhí)行的時間大于等于設(shè)置的時間,直接執(zhí)行函數(shù)
            lastTime= nowTime ;
            fn.apply(context, args);
        }
    };
}

區(qū)別:

可以用日常進入電梯來舉例,形象地描述節(jié)流和防抖的區(qū)別

函數(shù)防抖:如果A在10:00:00開門走入電梯內(nèi)(觸發(fā)事件),如果后續(xù)沒有人進入電梯,電梯將在5秒鐘之后10:00:05關(guān)門(執(zhí)行事件監(jiān)聽器)。這時如果B在10:00:04走入電梯內(nèi),電梯會在10:00:09才關(guān)門。

函數(shù)節(jié)流 :如果A在10:00:00開門走入電梯內(nèi)(觸發(fā)事件),如果后續(xù)沒有人進入電梯,電梯將在5秒鐘之后10:00:05關(guān)門(執(zhí)行事件監(jiān)聽器)。這時如果B在10:00:04走入電梯內(nèi),電梯同樣是在10:00:05關(guān)門。這個時間從第一個人進入電梯開始計時,不管在5秒之內(nèi)進來多少人,電梯都會在10:00:05關(guān)門。如果一直沒有人進來,則電梯不運行。

總結(jié):

根據(jù)實際業(yè)務(wù)場景,合理的利用debounce(防抖)和throttle(節(jié)流)可以優(yōu)化性能和提高用戶體驗。

效果:
函數(shù)防抖是某一段時間內(nèi)只執(zhí)行一次;
函數(shù)節(jié)流是間隔時間執(zhí)行,不管事件觸發(fā)有多頻繁,都會保證在規(guī)定時間內(nèi)一定會執(zhí)行一次真正的事件處理函數(shù)。

原理:
防抖是維護一個計時器,規(guī)定在delay時間后觸發(fā)函數(shù),但是在delay時間內(nèi)再次觸發(fā)的話,都會清除當(dāng)前的 timer 重新計時。這樣一來,只有最后一次操作事件才被真正觸發(fā)。
節(jié)流是通過判斷是否到達一定時間來觸發(fā)函數(shù),若沒到規(guī)定時間則使用計時器延后,而下一次事件則會重新設(shè)定計時器。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102055.html

相關(guān)文章

  • 高級函數(shù)技巧-函數(shù)抖與節(jié)流

    摘要:封裝方法也比較簡單,書中對此問題也進行了處理使用定時器,讓函數(shù)延遲秒后執(zhí)行,在此秒內(nèi),然后函數(shù)再次被調(diào)用,則刪除上次的定時器,取消上次調(diào)用的隊列任務(wù),重新設(shè)置定時器。 在實際開發(fā)中,函數(shù)一定是最實用最頻繁的一部分,無論是以函數(shù)為核心的函數(shù)式編程,還是更多人選擇的面向?qū)ο笫降木幊?,都會有函?shù)的身影,所以對函數(shù)進行深入的研究是非常有必要的。 函數(shù)節(jié)流 比較直白的說,函數(shù)節(jié)流就是強制規(guī)定一...

    whinc 評論0 收藏0
  • The debounce & throttle in Javascript抖與節(jié)流

    摘要:您的支持是我最大的動力,我會保證提供高質(zhì)與清晰的文章與您共同成長。一些文章中的與上面所談到的設(shè)置類似。防抖防抖技術(shù)允許我們捆綁多個連續(xù)調(diào)用成為單一的一次調(diào)用。防抖的應(yīng)用這個簡單的舉個 歡迎star和watch我的github issue blog,歡迎加入討論。您的支持是我最大的動力,我會保證提供高質(zhì)與清晰的文章與您共同成長。 節(jié)流[throttle]與防抖[debounce]在前...

    XboxYan 評論0 收藏0
  • 前端進擊的巨人(八):淺談函數(shù)抖與節(jié)流

    摘要:隆重請出主角防抖與節(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); 本篇課題,或許早已是爛大街的解讀文章。不過春招系列面試下來,不少伙伴們還...

    _Zhao 評論0 收藏0
  • 前端筆記(二) 對象的深淺拷貝,函數(shù)抖與節(jié)流函數(shù)柯里化 ,圖片的預(yù)加載與懶加載

    摘要:對象是無法通過這種方式深拷貝。這就是函數(shù)防抖和節(jié)流要做的事情。函數(shù)防抖當(dāng)觸發(fā)頻率過高時函數(shù)基本停止執(zhí)行而函數(shù)節(jié)流則是按照一定的頻率執(zhí)行事件。 對象的深淺拷貝 對象的深拷貝與淺拷貝的區(qū)別: 淺拷貝:僅僅復(fù)制對象的引用, 而不是對象本身。 深拷貝:把復(fù)制的對象所引用的全部對象都復(fù)制一遍 淺拷貝的實現(xiàn): var obj = { age : 18, person : { ...

    dongxiawu 評論0 收藏0
  • 函數(shù)抖與節(jié)流

    摘要:函數(shù)防抖就是讓某個函數(shù)在上一次執(zhí)行后,滿足等待某個時間內(nèi)不再觸發(fā)此函數(shù)后再執(zhí)行,而在這個等待時間內(nèi)再次觸發(fā)此函數(shù),等待時間會重新計算。 underscore.js提供了很多很有用的函數(shù),今天想說說其中的兩個。這兩個函數(shù)都用于限制函數(shù)的執(zhí)行。 debounce 在解釋這個函數(shù)前,我們先從一個例子看下這個函數(shù)的使用場景。假設(shè)我們網(wǎng)站有個搜索框,用戶輸入文本我們會自動聯(lián)想匹配出一些結(jié)果供...

    Mr_zhang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<