고해상도 타이머는 +new Date
및 최신 Date.now()
에서 제공하는 것보다 더 정확한 웹 플랫폼 측정을 허용하기 위해 WebPerf 작업 그룹에서 추가했습니다.
비교를 위해 다음과 같은 값이 반환됩니다.
Date.now() // 1337376068250
performance.now() // 20303.427000007
위의 두 값은 큰 차이가 있습니다. performance.now()
는 특정 페이지 로드가 시작된 후 경과한 부동 소수점 밀리초 (구체적으로는 performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart)
타임스탬프)를 나타냅니다. Unix epoch 이후의 밀리초 수일 수 있다고 주장할 수 있지만 웹 앱에서 현재와 1970년 사이의 거리를 알아야 하는 경우는 거의 없습니다. 이 숫자는 두 개 이상의 측정값을 서로 비교하므로 페이지에 상대적으로 유지됩니다.
Monotonic time
또 다른 이점은 시간이 단조롭다는 점에 의존할 수 있다는 것입니다. WebKit 엔지니어 토니 젠틸코어님이 설명해 드리겠습니다.
사용 사례
기본 타임스탬프를 가져오는 대신 이 고해상도 타이머를 사용하는 경우는 다음과 같습니다.
- 벤치마킹
- 게임 또는 애니메이션 런루프 코드
- 정밀도로 프레임 속도 계산
- 애니메이션이나 기타 시간 기반 시퀀스의 특정 지점에서 발생하도록 작업이나 오디오를 큐잉
가용성
고해상도 타이머는 현재 Chrome (안정화 버전)에서 window.performance.webkitNow()
로 사용할 수 있으며, 이 값은 일반적으로 requestAnimationFrame 콜백에 전달된 새 인수 값과 같습니다. 곧 WebKit에서 접두사를 삭제하고 performance.now()
를 통해 사용할 수 있게 됩니다. 특히 Microsoft의 Jatinder Mann이 이끄는 WebPerfWG는 기능의 접두사를 매우 빠르게 삭제하는 데 성공했습니다.
요약하면 performance.now()
는 다음과 같습니다.
- 소수점 이하에 마이크로초가 있는 double
- UNIX epoch가 아닌 페이지의
navigationStart
를 기준으로 합니다. - 시스템 시간이 변경될 때 왜곡되지 않음
- Chrome 안정화 버전, Firefox 15 이상, IE10에서 사용할 수 있습니다.