어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ

⚪️ [JS] setInterval, setTimeout이랑 비슷한 Throttle, Debounce 본문

자바스크립트/⚪️ Vanilla

⚪️ [JS] setInterval, setTimeout이랑 비슷한 Throttle, Debounce

비니_ 2025. 3. 22. 15:05
728x90
setInterval(function() {
    if (didScroll) {
        hasScrolled();
        didScroll = false;
    }
}, 250);

 

=> 0.25초 마다 반복해서 검사

=> didScroll이 true면 hasScrolled() 함수 실행하고 didScroll 을 false로 초기화 시켜라

 

 

비슷한걸 챗지피티가 알려줘서 기록용으로 써두기

나는 일단 처음 들어봄!

Throttle(쓰로틀) vs Debounce(디바운스)

=> setTimeout이나 setIntervla 처럼 js 기본 문법은 아니고 js로 구현가능한 개념

=> Lodash 같은 라이브러리로도 사용 가능

개념 설명 예시 상황
Throttle 일정 시간 간격으로만 함수 실행 (중간에 아무리 이벤트가 많이 발생해도 무시)
=> "계속 와도 내가 알아서 간격 두고 실행할게"
스크롤 이벤트, 윈도우 리사이즈 등
Debounce 마지막 이벤트가 발생하고 일정 시간 지났을 때 함수 실행
=> "너 그만하고 좀 멈추면 그때 실행할게"
검색창 자동완성, input 입력 이벤트 등

Throttle 예시

let throttleTimer;
window.addEventListener('scroll', () => {
    if (!throttleTimer) {
        throttleTimer = setTimeout(() => {
            console.log('스크롤 중 실행!');
            throttleTimer = null;
        }, 200);
    }
});

 

=> 0.2초 뒤에 한 번만 실행

=> 그 사이 스크롤 계속해도 무시

=> setIntercal과 구조가 비슷함

=> ex) 스크롤, 리사이즈

 

 

Debounce 예시

let debounceTimer;
document.querySelector('input').addEventListener('input', () => {
    clearTimeout(debounceTimer);
    debounceTimer = setTimeout(() => {
        console.log('입력 끝났을 때 실행!');
    }, 500);
});

 

=> input 입력 끝난 후 0.5초 후에 실행

=> 입력 도중엔 실행 안 함

=> ex) 검색창 자동완성

 

 

728x90
Comments