코딩을 쉽게 해보자

[Deep Dive] 41장 - 타이머 본문

JavaScript

[Deep Dive] 41장 - 타이머

꿀단지코딩 2023. 1. 26. 08:38

1. 호출 스케줄링

함수를 명시적으로 호출하면 함수가 즉시 실행된다.

 

만약 함수를 명시적으로 호출하지 않고 일정 시간이 경과된 이후에

호출되도록 함수 호출을 예약하려면

타이머 함수를 사용한다.

이를 호출 스케줄링이라 한다.

 

JS는 타이머를 생성할 수 있는 타이머 함수 setTimeout과 setInterval,

타이머를 제거할 수 있는 타이머 함수 clearTimeout과 clearInterval을 제공한다.

 

JS 엔진은 단 하나의 실행 컨텍스트 스택을 갖기 때문에

두 가지 이상의 태스크를 동시에 실행할 수 없다.

 

즉, JS엔진은 싱글 스레드로 동작한다.

이러한 이유로 setTimeout과 setInterval은 비동기 처리 방식으로 동작한다.

 

2. 타이머 함수

2-1. setTimeout / clearTimeout

setTimeout 함수의 콜백 함수는 두 번째 인수로 전달받은 시간 이후 단 한 번 실행되도록 호출 스케줄링된다.

setTimeout 함수는 생성된 타이머를 식별할 수 있는 고유한 타이머 id를 반환한다.

setTImeout 함수가 반환한 타이머 id를 clearTimeout 함수의 인수로 전달하여 타이머를 취소할 수 있다.

 

2-2. setInterval / clearInterval

setInterval 함수의 콜백 함수는 두 번째 인수로 전달받은 시간이 경과할 때마다 반복 실행되도록 호출 스케줄링된다.

setInterval 함수도 생성된 타이머를 식별할 수 있는 고유한 타이머 id를 반환한다.

clearInterval 함수는 호출 스케줄링을 취소한다.

 

3. 디바운스와 스로틀

짧은 시간 간격으로 연속해서 발생하는 이벤트를 그룹화해서
과도한 이벤트 핸들러의 호출을 방지하는 프로그래밍 기법

 

3-1. 디바운스

디바운스는 짧은 시간 간격으로 발생하는 이벤트를 그룹화해서

마지막에 한 번만 이벤트 핸들러가 호출되도록 한다.

 

resize 이벤트 처리, input 요소 값으로 ajax 요청하는 입력 필드 자동완성 UI 구현, 버튼 중복 클릭 방지 처리 등

에 유용하게 사용된다.

 

3-2. 스로틀

디바운스는 짧은 시간 간격으로 발생하는 이벤트를 그룹화해서

일정 시간 단위로 이벤트 핸들러가 호출되도록 호출 주기를 만든다.

 

scroll 이벤트 처리, 무한 스크롤 UI 구현 등에 유용하게 사용된다.

 

'JavaScript' 카테고리의 다른 글

[Deep Dive] 43장 - Ajax  (0) 2023.01.28
[Deep Dive] 42장 - 비동기 프로그래밍  (0) 2023.01.27
[Deep Dive] 40장 - 이벤트  (0) 2023.01.23
[Deep Dive] 39장 - DOM  (0) 2023.01.03
[Deep Dive] 38장 - 브라우저의 렌더링 과정  (0) 2023.01.02