Hah-nna / Tech_Interview

0 stars 0 forks source link

[js]Debounce , Throttling #56

Open young-02 opened 10 months ago

young-02 commented 10 months ago

디바운싱

빈번하게 발생하는 이벤트를 '특정 시간 이후에 한번만' 실행 시키는 최적화 기법

디바운싱 시간이 300밀리초 설정이 되어있다면 사용자가 클릭을 멈추고 300밀리초가 지나고 나서야 해당 함수가 한번만 실행된다.

사용자가 여러 번 클릭을 하면 마지막 함수만 호출하게 된다.

사용

const clickBtn = doument.querySelector('#clickBtn')
const clickCnt = document.querySelector('#clickCnt')
const debouncingCnt = document.querySelector('#debouncingCnt')

let timerId

function debouncing(fnc, timeout = 300){
    clearTime(timerId)
    timerId = setTimeout(func, timeout)
}

function delayFunction(){
    debouncingCnt.innerHTML = parseInt(debouncingCnt.innerHTML) +1
}

clickBtn.addEventListener('click', ()=>{
    clickCnt.innerHTML = parseInt(clickCnt.innerHTML)+1;
    debouncing(delayFunction)
})

쓰로틀링

빈번하게 발생하는 이벤트를 '일정한 간격으로 한번만' 실행 시키는 최적화 기법

쓰로틀링은 마지막 함수를 기다리지 않으며, 첫 번째 클릭에 의한 이벤트만을 실행한고 주어진 시간 동안 나머지는 무시한다.

사용

const clickBtn = doument.querySelector('#clickBtn')
const clickCnt = document.querySelector('#clickCnt')
const debouncingCnt = document.querySelector('#debouncingCnt')

let timerId

function throttling(func, timout = 300){
    if(timerId){
        return
    }

    timerId = setTimeout(()=>{
        func()
        timerId = undefined
    },timeout)
}

function delayFunction(){
    throttlingCnt.innerHTML = parseInt(throttlingCnt.innerHTML) +1
}

clickBtn.addEventLsitener('click' ,()=>{
    clickCnt.innerHTML = paserInt(clickCnt.innerHTML) +1 
    thottling(delayFunction)
})

차이점

라이브러리

young-02 commented 10 months ago

https://onlydev.tistory.com/151