rAF가 우선이 되는 확률 실험
Queue에서 CallStack으로 넘어가는 시점에서의 우선순위는 setTimeout의 태스크보다 rAF가 높다고 하지만 현실적으로는 백그라운드에서 Queue로 들어가는 시간차이가 무엇을 더 먼저실행시킬지를 결정하는 결정적 요인이 된다
보통 setTimeout 은 1ms 정도 이후 실행되겠지만 rAF는 그렇지 않다 어떨때는 1ms 도 안걸릴수도 있고 길면 16ms 까지 걸릴수도 있는것이다.
rAF의 실행 시간에 시간차이가 이렇게 큰 이유는 실행시점으로부터 다음 화면갱신의 시간까지 얼마나 남았는지에 따라 결정되기 때문이고 화면갱신은 모니터 주사율에 따르게된다.
따라서 다음 화면갱신을 2ms 앞두고 실행했다면 2ms 후에 실행되는것이고 16ms 남겨뒀다면 16ms 걸리는것이다.
그렇다면 지금 우리는 rAF를 통해 콜백을 하나 예약했다고 하자.
그럼 확률적으로 얼마 이후에 실행될것이라고 생각하는게 맞는가?
0ms? 16ms? 확률적으로 그 중간인 평균 8ms 이라고 생각할 수 있겠다.
setTimeout 도 실행했다고 해보자. 얼마뒤에 실행된다고 생각하는게 맞을까? 이건 뭐 1ms 정도 이후가 된다고 보면된다.
rAF의 시간인 평균 8ms 이라는 의미이는 빠르면 1ms 이하의 시간이 나올수도 있다는 의미이다.
그렇다는것은 rAF는 setTimeout 보다 1/8의 확률로 먼저 실행될 수도 있다는 의미이다.
그래서 실험을 해봤다.
setTimeout(() => { }); requestAnimationFrame(() => { });