호출 스케일링이란 setTimeout, setInterval이 있다.
setTimeout - 일정 시간이 지난 후에 함수를 실행하는 방법
setInterval - 일정 시간 간격을 두고 함수를 실행하는 방법
이것만 보면 별차이 없어보이지만 자세히 확인해보자
문법
let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)
func|code - 실행될 함수
[delay] - 대기 시간으로 단위는 밀리초
뒤는 전달할 인수들이다.
이 때 드는 생각은 왜 함수에 전달할 인수들을 함수에 포함시키지 않을까 인데
이는 함수 작성 시, 괄호를 생략하고 함수명만 적기 때문이다.
setTimeout과 사용방법은 똑같지만 다른 점은 setTimeout은 한 번만 실행되지만
setInterval은 일정 시간"마다" 실행시킨다.
위 설명이 너무 두루뭉실해서 오해할 수 있었지만,
확실히 다른 것을 확인할 수 있다.
setTimeout의 대기시간을 0으로 설정하면 어떨까라는 생각이 들 수 있다.
하지만 setTimeout을 사용한 시점부터 함수 실행 순서는 뒤로 미뤄지고
실행중인 스크립트의 처리가 끝난 후 실행시켜준다.
즉, 빠르게 실행되는 것이 아닌 가능한 빠르게 실행시킨 다는 점이다.
CPU가 과부하 상태인 경우
브라우저 탭이 백그라운드 모드인 경우
노트북이 배터리에 의존해서 구동 중인 경우
이런 경우엔 브라우저 타이머가 늦춰지므로 지연 간격이 보장되지 않는 점을 주의해야한다.