函數(shù)防抖和函數(shù)節(jié)流

參考鏈接:https://juejin.im/post/5a35ed25f265da431d3cc1b1
我的理解:
函數(shù)防抖相當(dāng)于一堆請(qǐng)求事件中調(diào)用最后的。當(dāng)事件一直觸發(fā)時(shí)候,不發(fā)送請(qǐng)求,直到比如過(guò)了300ms之后,再次發(fā)送請(qǐng)求。相當(dāng)于一堆請(qǐng)求事件中,調(diào)用最后面的。使用setTimeout(綁定的函數(shù),300)onclick = debounce(fn)
debounce (fn){
setTimeout(fn,300);
}
函數(shù)節(jié)流相當(dāng)于,當(dāng)一個(gè)事件被觸發(fā)之后,設(shè)置一個(gè)標(biāo)志位,在比如300ms沒(méi)到來(lái)之前,任何的再次觸發(fā)都會(huì)被返回。用setTimeout,延時(shí)多久?;蛘哒f(shuō)等到回調(diào)函數(shù)返回之后,標(biāo)志位才可以改,才接受發(fā)送下一次的請(qǐng)求。相當(dāng)于一堆請(qǐng)求事件中,調(diào)用最開始的。
onclick=throttle()
throtle(){
let flag = false;
if(!flag){
flag = true;
setTImeout(fn,300);
}
}

原文鏈接:https://blog.csdn.net/orchid_djl/article/details/79924898
網(wǎng)上博客。寫的挺好。
js實(shí)現(xiàn)之--防抖節(jié)流【理解+代碼】
在前端開發(fā)中,有一部分用戶行為會(huì)頻繁的觸發(fā)事件,而對(duì)于DOM操作,資源加載等耗費(fèi)性能的處理,很可能會(huì)導(dǎo)致卡頓,甚至瀏覽器的崩潰。防抖和節(jié)流就是為了解決這一類的問(wèn)題。

防抖:

理解:在車站上車,人員上滿了車才發(fā)走重點(diǎn)是人員上滿觸發(fā)一次。

場(chǎng)景:實(shí)時(shí)搜索,拖拽。

實(shí)現(xiàn):

    //每一次都要清空定時(shí)器,重新設(shè)置上計(jì)時(shí)器值,使得計(jì)時(shí)器每一次都重新開始,直到最后滿足條件并且等待delay時(shí)間后,才開始執(zhí)行handler函數(shù)。

function debunce(handler,delay){
//handler是要傳入的進(jìn)行防抖的函數(shù),delay是等待時(shí)間。
var timer = null;
return function(){
var _self = this,args = arguments;
clearTimeout(timer); //每次都要清除這個(gè)定時(shí)器
timer = setTimeout(function(){ //重新開啟定時(shí)器
handler.apply(_self,args);
},delay);
}
}
節(jié)流:

理解:大于等于10分鐘發(fā)一次車,重點(diǎn)是一定間隔時(shí)間就會(huì)觸發(fā)一次。

        (即預(yù)定一個(gè)函數(shù)只有在大于等于執(zhí)行周期時(shí)才會(huì)執(zhí)行,周期內(nèi)不執(zhí)行)。

場(chǎng)景:窗口調(diào)整(調(diào)整大?。?,頁(yè)面滾動(dòng)(滾動(dòng)),搶購(gòu)時(shí)瘋狂點(diǎn)擊(鼠標(biāo)按下)

實(shí)現(xiàn):

    //處理程序是要傳入的進(jìn)行節(jié)流的函數(shù),wait是上述的間隔時(shí)間。

    //使用時(shí)間戳進(jìn)行時(shí)間的計(jì)算。

    function throttle(handler,wait){  //handler是要進(jìn)行節(jié)流的函數(shù),wait是等待時(shí)間
        var lastTime = 0;
        return function(){
            var nowTime = new Date().getTime();    //獲取當(dāng)前時(shí)間
            if(nowTime - lastTime> wait){
                handler.apply(this,arguments);
                lastTime = nowTime;      //更新最后時(shí)間
            }
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容