經常會在issue裡看到測試提的這樣的一個bug,使勁兒反覆點一個按鈕,咔咔咔點點點,發了好多個請求去後臺。
1.恁低端測試之:抖動
對於這種人我只想說:用函式防抖來收拾他!
大致的意思就是:延遲一個時間再執行要執行的函式,若在這個延遲時間內再次被觸發,那麼就把上個定時器給清了,重新setTimout
function debounce(fn, delay) {
let timerId
return function(...args){
clearTimeout(timerId)
timerId = setTimeout(()=> {
fn(...args)
}, delay)
}
}
複製程式碼
測試demo:
<input type="text" id="input">
document.querySelector('#input').addEventListener('input', debounce(handleOnInput, 1500))
function handleOnInput(arg) {
console.log(arg.target.value);
}
複製程式碼
使勁兒跟那兒輸入看看列印的結果呢~(跟防止使勁兒點一個button一個道理)
2.恁高階測試之:節流
最常見的就是scorll事件滾一下觸發太多次了,我們想讓它在一個時間段內只執行一次(就是讓它均勻的被觸發,而不是咔咔咔一直觸發)
function throttle(fn, interval, lock=false){
return function(...args) {
if(lock) return;
lock = true
fn(...args)
setTimeout(() => {
lock = false
}, interval);
}
}
複製程式碼
意思是:目標函式在執行的時候,用一個變數控制再來控制是否能再次執行,我們會在setTimeout裡週期性的把lock置為false.
小夥兒,聽說你愛測效能對吧?