일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- IP
- CSS
- 3티어 아키텍처
- http 모듈
- react
- Hybrid Blockchain
- 명시도
- short-circuiting
- 2티어 아키텍처
- Factory 함수
- npm
- 안정 정렬
- Relational Database
- CSS Specificity
- ES6 모듈
- NoSQL
- skip ci
- Factory Functions
- 텍스트 가운데 정렬
- javascript
- 불안정 정렬
- SQL
- UTXO
- caverjs
- Private Blockchain
- 블록체인
- solidity
- #유니티
- #1인게임개발
- CLI
- Today
- Total
짹뚜 스튜디오
setTimeout, setInterval and requestAnimationFrame 본문
해당 글은 모든 자바스크립트 개발자가 알아야 하는 33가지 개념에서 열 번째인 setTimeout, setInterval and requestAnimationFrame 항목을 공부하면서 간단하게 작성한 글이다.
setTimeout
setTimeout은 특정 시간이 지난 후에 함수를 호출할 때 사용하는 Web API이다.
let timeoutID = setTimeout( foo1, 1000, arg1, arg2, ... );
첫 번째 인자로는 실행할 함수를 받고 두 번째 인자로는 몇 초가 지난 뒤 실행할지 millisecond로 받는다. 그래서 위 코드에서는 1000ms = 1초 후에 foo1이라는 함수를 호출하라는 의미가 된다. 그리고 setTimeout 함수는 양의 정수 값을 반환하는데 이것은 setTimeout이 생성한 타이머를 식별하는 데 사용한다.
arg1부터는 호출될 함수에 보낼 parameter 값들이다.
clearTimeout
clearTimeout은 setTimeout으로 생성된 timeout 타이머를 취소시킨다.
clearTimeout( timeoutID );
setInterval
setInterval은 setTimeout과 비슷하지만 다른 점은 delay로 주어진 시간마다 반복해서 함수를 호출한다.
let intervalID = setInterval( foo1, 1000, arg1, arg2, ... );
clearInterval
clearInterval은 setInterval 으로 생성된 timeout 타이머를 취소시킨다.
clearInterval( intervalID );
requestAnimationFrame
이전에는 자바스크립트로 애니메이션을 만들 때 setInterval을 주로 사용했다. 부드러운 애니메이션을 만들기 위해서는 1초에 60 프레임 정도만 찍어내면 된다.
setInterval( animation , 1000/60 );
그러나 위에 방법처럼 하면 CPU나 그래픽카드가 느릴 때는 interval이 늦어질 수 있다. 그리고 setInterval은 정수 값을 인자로 받는데 1000/60은 정수가 나올 수가 없다. 그래서 간혹 가다 Frame skip이 발생할 수 도있다. 이러한 단점을 보완하기 위해 나온 것이 requestAnimationFrame이다. requestAnimationFrame은 인자값으로 호출할 함수만 받는다.
let animationFrameID = requestAnimationFrame( foo1 );
requestAnimationFrame의 장점은 다음과 같다.
- 백그라운도 동작 및 다른 탭으로 이동 시 중지된다. (성능 최적화)
- 1초에 60번 호출 또는 모니터의 주사율에 맞춰서 실행한다.
- 여러 개의 애니메이션을 만들 때도 각각의 타이머를 생성하지 않고 하나의 타이머를 사용한다.
그리고 requestAnimationFrame은 자기 자신을 반복 호출하지 않기 때문에, 재귀적으로 requestAnimationFrame을 호출해줘야 한다.
function animation(){
//애니메이션 코드...
requestAnimationFrame( animation );
}
requestAnimationFrame( animation );
cancelAnimationFrame
스케줄 된 requestAnimationFrame 요청을 취소한다.
cancelAnimationFrame( animationFrameID );
'개발 공부 > javascript' 카테고리의 다른 글
[Javascript] arguments (0) | 2022.01.09 |
---|---|
자바스크립트 엔진 (0) | 2021.12.30 |
Event Loop (이벤트 루프) (0) | 2021.12.24 |
모듈 (0) | 2021.12.22 |
IIFE (Immediately Invoked Function Expression) (0) | 2021.12.22 |