Typescript 實現(xiàn)防抖和節(jié)流

在寫這篇博客前,我們先來說說為啥需要防抖和節(jié)流?

馬上過春節(jié)了,又到了每年一度的搶票環(huán)節(jié)了,數(shù)以萬計的用戶在網(wǎng)上訂票,由于并發(fā)高后臺壓力大?網(wǎng)絡(luò)差?導(dǎo)致用戶在點擊訂票的時候,網(wǎng)站上馬上就沒有下文了,于是乎急切的用戶們就瘋狂的點擊著查詢?訂購等按鈕,無數(shù)重復(fù)請求被發(fā)送到后端,后端表示壓力更大了。

在這種場景下,前端有多種方法限制用戶無效請求,然而防抖和節(jié)流控制是比較優(yōu)的選擇,在沒有提升用戶操作復(fù)雜度的,用戶不感知的前提下,有效提升了有效請求率。

防抖(個人理解):在指定時長內(nèi),若出現(xiàn)重復(fù)操作,以最后一次操作為準(zhǔn)發(fā)送請求。

節(jié)流(個人理解):在指定時長內(nèi),若出現(xiàn)重復(fù)操作,以第一次為準(zhǔn)。

下面我們來說說如何實現(xiàn)防抖和節(jié)流吧?最近項目中采用vue3.0+Typescript開發(fā),下面講講如何用Typescript實現(xiàn)防抖節(jié)流。

/utils/common.ts

/**

?*?防抖?和?節(jié)流?類

?*/

export?class?ActionControl?{

??timeout?=?0;

??fn:?any?=?null;

??wait?=?0;

??preActionTime?=?0;

??constructor(fn:?any,?wait:?number)?{

????this.fn?=?fn;

????this.wait?=?wait;

??}

??debounce():?void?{

????if?(this.timeout?!==?0)?clearTimeout(this.timeout);?//清除這個定時器

????this.timeout?=?setTimeout(this.fn,?this.wait);

??}

??throttle():?void?{

????if?(this.preActionTime?===?0)?this.preActionTime?=?new?Date().getTime();

????const?timeBetween?=?new?Date().getTime()?-?this.preActionTime;

????console.log(timeBetween);

????if?(timeBetween?>=?this.wait)?{

??????this.timeout?=?setTimeout(()?=>?{

????????this.fn();

????????this.preActionTime?=?0;

??????},?this.wait);

????}

??}

}

//使用方法,親測有效

import?{?ActionControl?}?from?"@/utils/common";

????let?ac:?any?=?null;

????//防抖批量操作

????const?batchAction?=?()?=>?{

??????if?(ac?===?null)?{

????????ac?=?new?ActionControl(doBatchAction,?500);

??????}

??????ac.throttle();

????};

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 函數(shù)節(jié)流場景 例如:實現(xiàn)一個原生的拖拽功能(如果不用H5 Drag和Drop API),我們就需要一路監(jiān)聽mous...
    凡凡的小web閱讀 865評論 0 0
  • 閉包 由于節(jié)流和防抖函數(shù)的實現(xiàn)都用到了閉包,所以在了解節(jié)流和防抖之前我先簡單介紹下什么是閉包。 由于js代碼在一個...
    喵咪_f9a1閱讀 310評論 0 0
  • 防抖:把多次觸發(fā)頻繁的事件合并成一次去執(zhí)行。就是最后一次事件觸發(fā)后的指定時間內(nèi)只執(zhí)行一次回調(diào)函數(shù),如果在指定的時間...
    Greens_dbd2閱讀 263評論 0 0
  • 久違的晴天,家長會。 家長大會開好到教室時,離放學(xué)已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,818評論 16 22
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    余生動聽閱讀 10,836評論 0 11

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