vue 函數節流


背景:

  今天客戶在測試的時候,我發現了一個問題,那就是,客戶喜歡連續點擊一個按鈕,這時就會出現很多問題,最大的問題就是前段的ajax並發問題,因為客戶的連續點擊,同時發送多個請求,如果前面的請求響應比后面的請求響應的時間晚,前面的數據就會覆蓋后面的數據,這也是一個常見的問題吧

解決方案:

使用大家眾所周知的解決辦法,函數節流

函數的節流,應該是個學JS的應該就知道,當初的阿里的月餅門事件.. 就不多說了

首先需要定義一個周期延遲函數,記得定義定時器句柄

data () {
    return {
      // 設置定時器的句柄,用來緩存的
      timer: null
    };
  },
fnThrottle (method, delay, duration) {
        var that = this;
        var timer = this.timer;
        var begin = new Date().getTime();
        return function(){
          var context = that;
          var args = arguments;
          var current = new Date().getTime();
          clearTimeout(timer);
          if(current-begin>=duration){
            method.apply(context,args);
            begin=current;
          }else{
            console.log(delay)
            that.timer=setTimeout(function(){
              method.apply(context,args);
            },delay);
          }
        }
      }

然后重復定義一個執行函數

nextMat2:function(){
        this.fnThrottle(this.nextMat, 1000, 1000)();
      },

而nextMat就是真實執行函數

 nextMat:function() {
    console.log("我是真實執行函數")      
}

然后在上面的標簽中指定為執行函數就可以了

節流的時間按需求指定

當然這只是一個簡單粗暴的方法,具體的功能模塊化什么的,由大家自己優化

作者:彼岸舞

時間:2020\10\29

內容關於:工作中用到的小技術

本文來源於網絡,只做技術分享,一概不負任何責任


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM