Debounce와 Throttle: 차이점과 활용 방법
프로그래밍을 하다 보면 이벤트가 너무 자주 실행되어 성능 저하가 발생하는 경우가 많습니다. 대표적인 예로 스크롤 이벤트, 입력 필드 변화 감지, 창 크기 조절 등이 있습니다. 이런 문제를 해결하는 대표적인 기법이 **Debounce(디바운스)**와 **Throttle(스로틀)**입니다.
이번 글에서는 두 개념의 차이점을 이해하고, 언제 어떤 방식을 사용해야 하는지 실제 코드와 함께 알아보겠습니다.
1. Debounce(디바운스)란?
Debounce는 특정 이벤트가 연속적으로 발생할 때, 마지막 이벤트 이후 일정 시간이 지난 후에만 실행되는 기법입니다. 즉, 사용자가 계속해서 입력하거나 행동하는 동안에는 실행되지 않고, 일정 시간이 지나서야 함수가 실행됩니다.
동작 원리
이벤트가 발생하면, 기존 타이머를 초기화하고 새로운 타이머를 설정합니다.
사용자가 입력을 멈춘 후, 지정된 시간이 지나야 함수가 실행됩니다.
입력이 계속 들어오면 타이머가 계속 초기화되므로 실행되지 않습니다.
언제 사용할까?
검색창 자동완성 (사용자가 입력을 멈춘 후 API 요청)
창 크기 조절 이벤트 (사용자가 크기 조절을 멈춘 후 실행)
폼 입력 검증 (사용자가 입력을 마친 후 검증 실행)
2. Throttle(스로틀)란?
Throttle는 이벤트가 연속적으로 발생해도 일정한 간격으로만 실행되도록 제한하는 기법입니다. 즉, 특정 시간 간격 내에서는 한 번만 실행되도록 합니다.
동작 원리
이벤트가 발생하면, 실행 시간을 기록합니다.
이후, 지정된 시간이 지나야 다시 실행됩니다.
따라서, 이벤트가 계속 발생해도 일정한 간격으로만 실행됩니다.
언제 사용할까?
스크롤 이벤트 (무한 스크롤 또는 스크롤 위치 감지 최적화)
버튼 클릭 방지 (사용자가 버튼을 연타하더라도 일정 시간 간격으로만 실행)
마우스 이동 감지 (사용자의 마우스 좌표를 일정 간격으로 업데이트)
index.html
시연영상
'JavaScript' 카테고리의 다른 글
[JavaScript] 싱글톤 패턴 사용하기 (0) | 2025.02.17 |
---|---|
[JavaScript] 로컬 이미지 업로드 및 이미지 확대하여 모달창에 띄우기 (0) | 2025.02.12 |
[JavaScript] 다중 Progress Bar와 전체 진행률 구현하기 (2) - 일시중지 및 삭제버튼 추가 (0) | 2025.02.05 |
[JavaScript]TensorFlow.js로 고양이 이미지 판별 앱 만들기 (0) | 2025.02.04 |
[JavaScript] 사용자 입력 기반 다중 Progress Bar와 전체 진행률 구현하기 (0) | 2025.01.22 |