Recent Posts
Recent Comments
Archives
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- useRouter
- 프로그래머스
- 리터럴
- 모던자바스크립트
- Next
- 초기셋팅
- 스파르타코딩클럽
- 코딩테스트
- error
- CORS
- vercel
- nextjs
- React
- 내일배움캠프
- js
- 구글 로그인
- vscode
- 프로젝트 셋팅
- git
- 소셜 로그인
- deep dive
- 모던 자바스크립트
- 코테
- 오블완
- 자주 까먹는
- 티스토리챌린지
- 셋팅
- 코드카타
- array정적메서드
- domain
- Today
- Total
파피루스
디바운싱, 쓰로틀링 : 이벤트 제어로 성능 최적화 기법 본문
쓰로틀링(Throttling)과 디바운스(Debouncing)는 자주 발생하는 이벤트를 제어하여 성능을 최적화하는 기법으로, 주로 스크롤, 리사이즈, 텍스트 입력 같은 빈번한 사용자 상호작용에 사용됩니다. 두 기법 모두 불필요한 함수 호출을 줄여 성능 문제를 방지하지만, 그 동작 방식과 적용 상황이 다릅니다.
1. 디바운스 (Debouncing)
디바운스는 마지막 이벤트가 발생한 후 일정 시간이 지나기 전까지는 함수 호출을 미루는 기법입니다. 사용자가 계속해서 이벤트를 발생시키는 동안 함수 호출은 지연되며, 마지막 이벤트 이후 일정 시간이 지나면 비로소 함수가 실행됩니다.
동작 방식
- 이벤트가 발생할 때마다 타이머를 설정합니다.
- 만약 새 이벤트가 이전 타이머가 끝나기 전에 발생하면, 이전 타이머를 취소하고 새로운 타이머를 설정합니다.
- 마지막 이벤트 이후 일정 시간이 지나면 함수가 실행됩니다.
특징
- 마지막 이벤트 이후 일정 시간이 지나야만 함수가 실행됨.
- 짧은 시간 동안 여러 번 발생하는 이벤트 중 마지막 이벤트에 대한 함수 호출을 보장.
적용 예시
- 검색창 입력: 사용자가 검색어를 빠르게 입력할 때 실시간으로 요청을 보내기보다, 입력이 끝난 후 일정 시간 후에만 요청.
- 창 크기 조정: 사용자가 윈도우 사이즈를 변경하는 동안 지속적으로 레이아웃을 업데이트하기보다는, 리사이즈가 끝난 후에 한 번만 레이아웃을 조정.
2. 쓰로틀링 (Throttling)
쓰로틀링은 일정 시간 간격 내에서 한 번만 함수가 호출되도록 제한하는 기법입니다. 이벤트가 여러 번 발생해도 일정 시간 동안에는 한 번만 실행되며, 지정된 시간이 지난 후에 다시 이벤트가 발생할 경우 함수가 다시 실행됩니다.
동작 방식
- 함수가 호출되면 타이머를 설정하고, 그 타이머가 완료될 때까지 추가적인 함수 호출을 무시합니다.
- 타이머가 완료되면 다음 이벤트를 처리할 수 있게 됩니다.
특징
- 함수가 지정된 시간 간격마다 한 번만 호출됨.
- 이벤트가 여러 번 발생하더라도 주기적으로 함수가 실행됨.
적용 예시
- 스크롤 이벤트: 사용자가 스크롤할 때마다 발생하는 이벤트 처리 빈도를 제한하여 성능 최적화.
- 버튼 클릭 방지: 사용자가 버튼을 여러 번 빠르게 클릭하는 것을 막고, 일정 시간에 한 번씩만 함수가 실행되도록 제한.
비교
특징 | 디바운스 (Debounce) | 쓰로틀링 (Throttle) |
동작 원리 | 마지막 이벤트 후 일정 시간이 지나야 함수가 실행됨 | 일정 시간마다 한 번만 함수가 실행됨 |
함수 호출 빈도 | 이벤트가 발생하는 동안 함수가 호출되지 않다가, 마지막 이벤트 후 실행 | 일정 시간 간격으로 함수가 주기적으로 실행됨 |
사용 예시 | 검색창 자동 완성, 창 크기 조정 처리 | 스크롤 이벤트 처리, 버튼 클릭 방지 |
타이밍 | 이벤트가 끝난 후에 실행되므로 즉각적인 반응이 필요 없는 경우 적합 | 주기적으로 실행되므로 즉각적인 반응이 필요할 때 적합 |
주된 목적 | 연속된 이벤트 호출을 최소화 | 이벤트 호출을 주기적으로 제어 |
결론
- 디바운스는 마지막 이벤트 이후 일정 시간 동안 대기 후에만 함수를 실행하므로, 입력이 끝난 후에 한 번만 실행되는 동작에 적합합니다.
- 쓰로틀링은 일정한 시간 간격으로 이벤트를 제한해 실행하므로, 스크롤이나 마우스 이동 같은 이벤트를 주기적으로 처리할 때 유용합니다.
'Today I Learned' 카테고리의 다른 글
SSR, CSR 방식의 장단점과 특징 (3) | 2024.09.12 |
---|---|
OAuth 2.0 다이어그램 (0) | 2024.09.04 |
[vscode] eslint, prettier 자동 실행하는 설정들 (0) | 2024.08.31 |
이력서 작성 TIP (0) | 2024.08.26 |
[frontend] 면접 예상 질문지 (0) | 2024.08.05 |