디바운스와 쓰로틀

2022. 7. 24. 23:06·프론트엔드/JavaScript, TypeScript

단시간에 많은 양의 이벤트가 발생하면 해당 이벤트핸들러가 너무 많이 실행되서 성능상의 문제가 발생할 수 있다.

디바운스와 쓰로틀을 활용해 이러한 문제를 해결할 수 있다.

 

디바운스

단기간에 많은 양의 이벤트가 발생할 때 마지막 이벤트에서만 (사용자 조작이 끝났을 때) 콜백 함수를 실행시킨다.

let timer
document.addEventListener('scroll', () => {
	if(timer) clearTimeout(timer)
    timer = setTimeout(() => {
    	console.log('마지막에만 실행!)
    },400)
})

 

활용

사용자가 회원가입 할 때 아이디 중복체크를 자동적으로 해주는 경우가 있다. 사용자가 입력할 때 input에 change 콜백을 줘서 서버에 중복체크 요청을 하고, 결과를 입력 창 밑에 보여준다. (ex: 사용할 수 있는 아이디입니다.)

이 때 중복체크는 사용자가 입력하는 와중에는 할 필요가 없다. 사용자 입력이 끝났을 때만 해주면 된다. 이럴 때 디바운스를 적용해주면 서버에 적은 요청(적은 부하)를 주게 된다.

 

쓰로틀

단기간에 많은 양의 이벤트가 발생할 때 주기적으로 이벤트에 묶인 콜백을 실행한다.

let timer
document.addEventListener('scroll', ()=>{
	if(!timer) {
    	timer = setTimeout(()=>{
        	console.log('주기적으로 실행!')
            timer = null
        },200)
    }
})

 

활용

포토샵과 같은 편집기의 경우 <input type="slider"/> 를 활용해서 사용자가 막대기를 드래그해서 배경의 채도,명도 같은 부분을 조정한다. 조정할 때 값이 변경될 때마다 change 이벤트가 발생한다. 매번 배경의 채도를 변경하는 것은 작업이 너무 많기 때문에 이런 경우에 쓰로틀을 활용하면 사용자에게는 실시간으로 변경하는 것처럼 보이면서, 함수 실행은 훨씬 줄일 수 있다.

저작자표시 (새창열림)

'프론트엔드 > JavaScript, TypeScript' 카테고리의 다른 글

?. - Optional chaining 연산자 / ?? - Null 병합 연산자  (0) 2022.08.22
Promise 일정 시간 초과시 대기 취소하고 에러 처리하기  (1) 2022.08.07
Vanila Js로 사진첩 사이트 만들기  (0) 2022.03.16
Vanila Js로 SPA 만들기 - 리팩토링  (0) 2022.03.15
Vanila Js로 SPA 만들기  (0) 2022.03.10
'프론트엔드/JavaScript, TypeScript' 카테고리의 다른 글
  • ?. - Optional chaining 연산자 / ?? - Null 병합 연산자
  • Promise 일정 시간 초과시 대기 취소하고 에러 처리하기
  • Vanila Js로 사진첩 사이트 만들기
  • Vanila Js로 SPA 만들기 - 리팩토링
정현우12
정현우12
  • 정현우12
    정현우의 개발 블로그
    정현우12
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 프론트엔드 (56)
        • JavaScript, TypeScript (12)
        • 스타일링 (1)
        • React (13)
        • Next.js (4)
        • 개발 환경 (9)
        • 테스트 (3)
        • 성능 최적화 (11)
        • 함수형 프로그래밍 (2)
        • 구조 (1)
      • 프로젝트 회고 (23)
        • 이미지편집기 개발 (7)
        • 엑셀 다운로드, 업로드 공통 모듈 개발 (4)
        • 사용자 매뉴얼 사이트 개발 (3)
        • 통계자동화 솔루션 개발 (1)
        • 엑셀 편집기 개발 (5)
        • API 플랫폼 (1)
        • 콜센터 솔루션 OB 캠페인 (1)
        • AI 스튜디오 (1)
      • 백엔드 (0)
  • 블로그 메뉴

    • 홈
    • 포트폴리오
    • 태그
  • 인기 글

  • 태그

    Github Actions
    이미지 편집기
    커스텀 훅
    memoization
    TypeScript
    webpack
    React-boilerplate
    회고
    JavaScript
    useReducer
    엑셀
    Next.js
    라이브러리 선정
    엑셀 에디터
    로딩 성능 최적화
    렌더링 성능 최적화
    사용자 매뉴얼 사이트
    웹 성능 최적화
    frontend
    React
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정현우12
디바운스와 쓰로틀
상단으로

티스토리툴바