js的節流、防抖以及使用場景


介紹 😲

首先看一個沒有經過任何處理的🌰:

1 // 模擬一個輸出的函數
2 function input(value) {
3     console.log(`輸入的內容${value}`)
4 }
5 const ipt = document.getElementById('input')
6 
7 ipt.addEventListener("keyup",function(e){
8      input(e.target.value)
9 })

效果如下:

 

可以發現,只要按下鍵盤就會觸發函數調用,這樣在某些情況下會造成資源的浪費,在這些情況下,可能只需要在輸入完成后做請求,比如身份驗證等。

 

防抖處理

首先看下效果:

由此可以看出來,當我們重新頻繁的輸入后,並不會立即調用方法,只有在經過指定的間隔內沒有輸入的情況下才會調用函數方法;

代碼如下:

 1 function input(value) {
 2         console.log(`輸入的內容${value}`)
 3     }
 4 const ipt = document.getElementById('input')
 5 
 6 function debounce(fun,delay){
 7     let timer ;
 8     return function(args){
 9         const that = this
10         clearTimeout(timer)
11         timer = setTimeout(function(){
12             fun.call(that,args)
13         },delay)
14     }
15    }
16 const debounceInput = debounce(input,500)
17 ipt.addEventListener("keyup",function(e){
18     debounceInput(e.target.value)
19 })

 

節流處理

節流就是在規定的時間間隔呢,重復觸發函數,只有一次是成功調用

先看下效果:

可以看到在一直輸入的情況下每隔一段時間會觸發一次函數

代碼如下:

 1 function input(value) {
 2         console.log(`輸入的內容${value}`)
 3     }
 4 const ipt = document.getElementById('input')
 5 
 6 function throttle(fun,delay){
 7     let last,timer;
 8     return function(args){
 9         const that = this
10         const now = +new Date()
11         if(last && now < last + delay){
12             clearTimeout(timer)
13             timer = setTimeout(function(){
14                 fun.call(that,args)
15             },delay)
16         }else{
17             last = now
18             fun.call(that,args)
19         }
20     }
21 }
22 const throttleInput = throttle(input,1000)
23 ipt.addEventListener("keyup",function(e){
24     throttleInput(e.target.value)
25 })

方法總結 😴

  • 防抖和節流都是為了解決頻繁觸發某個事件的情況造成的性能消耗。
  • 防抖就是在出發后的一段時間內執行一次,例如:在進行搜索的時候,當用戶停止輸入后調用方法,節約請求資源
  • 節流就是在頻繁觸發某個事件的情況下,每隔一段時間請求一次,類似打游戲的時候長按某個按鍵,動作是有規律的在間隔時間觸發一次


免責聲明!

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



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