Programing/javascript

자바스크립트 debounce와 throttle 차이 및 성능 최적화 예제

2025. 4. 24. 08:20
반응형

사용자 입력, 스크롤, 리사이즈 등 브라우저 이벤트는 짧은 시간에 여러 번 연속으로 발생하는 경우가 많습니다. 이런 경우, 무분별하게 이벤트 핸들러가 호출되면 성능 저하가 발생할 수 있습니다. 이를 방지하기 위해 자바스크립트에서는 debounce(디바운스)와 throttle(스로틀) 기법을 활용합니다.

이 글에서는 두 개념의 차이점과 활용 예제를 정리합니다.


✨ debounce란?

연속된 이벤트 중 마지막 이벤트가 발생한 후 일정 시간 동안 아무 동작이 없을 때 한 번만 실행하는 방식입니다.

📌 사용 시점

  • 검색창 자동완성
  • 입력창 유효성 검사
  • 창 크기 조절 이벤트 처리

예제:

function debounce(fn, delay) {
  let timer;
  return function(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

const onResize = debounce(() => {
  console.log("창 크기 조절 완료!");
}, 500);

window.addEventListener("resize", onResize);

✨ throttle란?

연속된 이벤트가 발생하더라도 일정 시간 간격으로 함수 실행을 제한하는 방식입니다.

📌 사용 시점

  • 스크롤 위치 감지
  • 무한 스크롤 구현
  • 마우스 이동, 드래그 이벤트

예제:

function throttle(fn, limit) {
  let waiting = false;
  return function(...args) {
    if (!waiting) {
      fn.apply(this, args);
      waiting = true;
      setTimeout(() => {
        waiting = false;
      }, limit);
    }
  };
}

const onScroll = throttle(() => {
  console.log("스크롤 중");
}, 300);

window.addEventListener("scroll", onScroll);

🔍 비교 요약

 

구분 debounce throttle
실행 시점 마지막 이벤트 후 일정 시간 경과 시 일정 시간 간격으로 주기적 실행
활용 예시 검색창 입력, 유효성 검사 스크롤, 드래그 이벤트
특징 과도한 호출 방지 (딜레이 후 실행) 주기적 호출 제한

✅ 결론

debounce와 throttle은 자바스크립트 성능 최적화에서 매우 중요한 도구입니다. 상황에 따라 적절히 선택하여 활용하면 브라우저 리소스를 아끼고 UX를 향상시킬 수 있습니다.

  • 사용자 입력 이벤트 → debounce
  • 지속적인 움직임 이벤트 (스크롤, 드래그 등) → throttle
반응형

'Programing > javascript' 카테고리의 다른 글

moment.js 소개, 사용법, 그리고 심화 이해  (0) 2025.04.24
자바스크립트 날짜 다루기: Date vs dayjs vs date-fns  (0) 2025.04.24
브라우저 저장소 정리: localStorage vs sessionStorage vs cookie  (0) 2025.04.24
자바스크립트 이벤트 위임(Event Delegation)과 성능 최적화  (0) 2025.04.24
자바스크립트 IIFE 패턴(즉시 실행 함수 표현식)의 쓰임새와 모던 대안  (0) 2025.04.24
자바스크립트 클로저(Closure)의 개념과 실전 활용 예제  (0) 2025.04.24
자바스크립트 비동기 처리 개념 정리(setTimeout, Promise, async/await)  (0) 2025.04.23
자바스크립트 this 키워드 제대로 이해하기 (함수 / 객체 / 클래스에서)  (0) 2025.04.23
'Programing/javascript' 카테고리의 다른 글
  • 브라우저 저장소 정리: localStorage vs sessionStorage vs cookie
  • 자바스크립트 이벤트 위임(Event Delegation)과 성능 최적화
  • 자바스크립트 IIFE 패턴(즉시 실행 함수 표현식)의 쓰임새와 모던 대안
  • 자바스크립트 클로저(Closure)의 개념과 실전 활용 예제
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    IT블로그
    디자인패턴
    IT·컴퓨터
    php
    읽고 싶은 책
    자바
    iT's MY LiFE
    JavaScript
    SQL
    js패턴
    사고 싶은 책
    jsp
    위시리스트
    자바스크립트유틸
    Java
    IT 관련
    It
    블로그
    기초
    자바스크립트
Dongkkase
자바스크립트 debounce와 throttle 차이 및 성능 최적화 예제
상단으로

티스토리툴바