• <center id="sm46c"></center>
  • <dfn id="sm46c"></dfn>
  • <strike id="sm46c"></strike>
  • <cite id="sm46c"><source id="sm46c"></source></cite>
    • <strike id="sm46c"><source id="sm46c"></source></strike>
      <option id="sm46c"></option>
      国产精品天天看天天狠,女高中生强奷系列在线播放,久久无码免费的a毛片大全,国产日韩综合av在线,亚洲国产中文综合专区在,特殊重囗味sm在线观看无码,中文字幕一区二区三区四区在线,无码任你躁久久久久久老妇蜜桃

      Vue的防抖和節流(接口頻繁調用如何處理)

      2021-9-29    前端達人

      首先描述一下我所使用的業務場景:系統有一個批量審批的功能,每個審批的流程需要根據提交的用戶實時的反饋回去進去用戶頁面的刷新,如果一個用戶同時有多個流程被審批通過,前端會向服務端頻繁的多次調用同一個接口,造成服務器壓力過大和頁面卡頓,非常影響用戶體驗。
      目標:需要短時間內向服務端頻繁調用接口時只去調用最后一次的接口。(防抖)

      防抖和節流的區別:主要體現在執行次數上的區別,比如我們寫一個200ms的延遲時間,節流就是每200ms執行一次,而抖動是只有在最后一次事件的200ms內調用一次回調函數。
      防抖和節流都可以用于 mousemove、scroll、resize、input、click等事件,他們的區別在于防抖只會在連續的事件周期結束時執行一次,而節流會在事件周期內按間隔時間有規律的執行多次。

      防抖 debounce

      當事件被頻繁觸發時,在一定的時間內再去執行回調函數,如果在等待期間再次被觸發,則重新計時,直至整個等待期間沒有新的事件被觸發,執行回調函數。

      舉個例子:一個點擊事件,為了防止用戶重復發起請求,如果用戶在三秒內多次發生點擊事件,點擊事件將只執行一次,第一次和第二次點擊的間隔只要在三秒鐘內就會重置這個等待時間,第二次和第三次之間的最大等待時間也是三秒,如果第二次點擊事件發生后的三秒內沒有新的點擊事件產生,第二次點擊后的三秒就會調用回調函數。

      可以直接引用loadsh的debounce方法來實現函數防抖,也可以自己寫一個防抖函數(利用定時器)

      1. 引用loadsh

      這里先給一個中文文檔的地址:https://www.lodashjs.com/docs/lodash.debounce
      在vue3.x中也推薦了這種方式:https://v3.vuejs.org/guide/data-methods.html#methods
      有多種引用方式,這里我直接采用npm的方式

      npm i --save lodash 
      
      • 1

      使用loadsh的debounce方法

      <el-button id="myBtn" type="goon" icon="el-icon-search" @click="test">點擊事件</el-button> 
      
      • 1
      let _ = require('lodash'); _.debounce(fun,ms,options) fun: 回調函數
      ms:等待時間,毫秒
      options:選項對象 
      
      • 1
      • 2
      • 3
      • 4
      • 5

      注意:這里點擊事件要寫成test: 的形式,test()這樣是不生效的

      import debounce from 'lodash/debounce' methods:{ test:debounce(()=>{ console.log("防抖函數執行",) },3000) } //或者下面這種寫法 document.getElementById("myBtn").addEventListener('click', debounce(function (event) { console.log("防抖函數執行",) }, 3000)) 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      1. 自定義防抖函數
      <el-button type="goon" icon="el-icon-search" @click="test">點擊事件</el-button> 
      
      • 1
      data:{ timer:null }, methods:{ //在最后一次點擊三秒后才會觸發一次點擊事件 test(){ clearTimeout(this.timer) //自定義個定時器三秒后執行,一旦有新的事件發生會將這個定時器清除重新創建一個,只有三秒內不出現事件這個定時器才不會被銷毀重構 this.timer = setTimeout(()=>{ console.log("防抖執行,這里就是你需要執行的操作") },3000) } } 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15

      節流 throttle

      在規定的時間內只觸發一次回調函數,在規定時間內多次觸發函數,只會執行一次

      舉個例子:一個點擊事件,你設定了節流的延遲時間為一秒鐘,那么在你一直點擊的情況下,每隔一秒會觸發一次這個事件,直到你的點擊停止,這個不會累積,比如一秒鐘內點擊了五次,然后不再點擊時,事件也只會觸發一次而不會累積到觸發五次,這種累積的可以采用定時器實現。

      節流一般多用于監聽輸入框和滾動條,同樣的在我們的loadsh中也有寫好的節流的函數throttle,使用方法和上面防抖類似,這里就不詳細寫了,主要寫一下 自定義的節流函數。

      throttle(fun, ms,options) fun:需要節流的回調函數
      ms:等待時間
      options:額外配置項 
      
      • 1
      • 2
      • 3
      • 4

      自定義節流函數:
      原理就是用時間戳判斷是否到了回調的執行時間,記錄上次執行的時間戳,然后每次觸發 事件執行回調,回調里邊判斷當前時間戳距離上一次執行時間戳的間隔是否已經到達規定的時間,如果是就執行,并且會更新上次執行的時間戳。
      下面是我寫的一個簡單的例子,可以根據自己需求進行修改

      data:{ //這里我直接頁面創建時定義了一個初始的變量,保存上一次函數執行的時間 lastTime:new Date() }, methods:{ //fun 代表要執行的函數,需要被節流的函數 throttle(fun){ //函數執行時的時間 let now = new Date() console.log("now",now) console.log("lastTime",this.lastTime) //兩次調用的時間差 if (now - this.lastTime > 1000){ fun() //調用成功,上一次調用時間值修改 this.lastTime = now } }, test(){ this.throttle(function (){ //1000ms內無論點擊多少下,只會調用一次 console.log("節流函數調用,時間1000ms") }) }, } 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27

      image.png

      如果項目多次用到可以將以上的方法封裝成一個工具類。

      參考文章:https://www.jb51.net/article/161713.htm














      藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

      分享此文一切功德,皆悉回向給文章原作者及眾讀者.

      轉自:csdn
      免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

      藍藍設計www.li-bodun.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

      日歷

      鏈接

      個人資料

      藍藍設計的小編 http://www.li-bodun.cn

      存檔

      主站蜘蛛池模板: 无码精品人妻一区二区三区人妻斩| 欧洲丰满少妇做爰视频爽爽| 无码综合天天久久综合网| 久久久久无码精品国产人妻无码| 亚洲加勒比少妇无码av| 连续高潮喷水无码| 十八禁无码精品a∨在线观看 | 精品久久久久久久无码人妻热| 韩日美无码精品无码| 将乐县| 最新AV中文字幕无码专区| 国产精品毛片一区二区| 亚洲精品一区二区18禁| 天天在线看无码AV片| 国产精品中文字幕第一页| 精品欧美一区二区在线观看| 长武县| 国产亚洲精久久久久久无码苍井空 | igao国产精品| 亚洲制服丝袜av一区二区三区| 免费无码又爽又刺激高潮的app| 少妇人妻偷人精品一区二| 天天狠天天透天干天天| 少妇精品视频无码专区| 国产xxxxx在线观看免费| 无码8090精品久久一区| 宜都市| 国产在线观看91精品亚瑟| 日韩精品一卡二卡在线观看| 成人免费看www网址入口| 国产在线欧美日韩一区二区| 99国产精品99久久久久久| 国产精品国产片在线观看| 国产精品亚洲日韩AⅤ在线观看| 色噜噜亚洲精品中文字幕| 亚洲一区二区精品偷拍| 久久综合国产精品一区二区| 呦系列视频一区二区三区| 国产精品久久久久久久久久免费 | 国产精品丝袜视频| 无码人妻视频一区二区三区|