밀리초로는 부족할 때 -performance.now

WebPerf Working Group에서 고해상도 타이머를 추가하여 웹 플랫폼에서 +new Date 및 최신 Date.now()를 사용한 것보다 정확한 측정을 할 수 있도록 했습니다.

비교를 위해 다음과 같은 종류의 값이 반환됩니다.

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

위의 두 값은 훨씬 더 큰 차이를 확인할 수 있습니다. performance.now()는 특정 페이지가 로드되기 시작한 이후 부동 소수점 밀리초를 측정한 값입니다 (구체적으로 performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) 타임스탬프). 유닉스 에포크 이후 밀리초 수만큼 줄 수 있었다고 주장할 수는 있지만, 웹 앱이 현재와 1970년 사이의 거리를 알아야 하는 경우는 거의 없습니다. 두 개 이상의 측정값을 서로 비교하게 되므로 이 수치는 페이지를 기준으로 합니다.

모노토닉 시간

또 다른 추가적인 이점은 단조로운 시간에 의존할 수 있다는 것입니다. WebKit 엔지니어인 Tony Gentilcore가 이 문제에 대해 설명하도록 하겠습니다.

사용 사례

기본 타임스탬프를 가져오는 대신 고해상도 타이머를 사용하는 경우가 몇 가지 있습니다.

  • 벤치마킹
  • 게임 또는 애니메이션 런루프 코드
  • 정밀한 프레임 속도 계산
  • 애니메이션이나 다른 시간 기반 시퀀스의 특정 지점에서 동작이나 오디오를 재생하도록 신호를 보내세요.

지원 대상

고해상도 타이머는 현재 Chrome (공개 버전)에서 window.performance.webkitNow()로 사용할 수 있으며 이 값은 일반적으로 requestAnimationFrame 콜백에 전달된 새 인수 값과 동일합니다. 조만간 WebKit에서 접두사를 삭제하며 performance.now()를 통해 사용할 수 있습니다. 특히 Microsoft의 자틴더 만(Jatinder Mann)이 이끄는 WebPerfWG는 기존 기능의 프리픽스 제거에 매우 성공적이었습니다.

요약하면 performance.now()는 다음과 같습니다.

  • 소수로 마이크로초가 있는 double
  • Unix epoch가 아닌 페이지의 navigationStart 기준
  • 시스템 시간이 변경될 때 왜곡되지 않음
  • Chrome 안정화, Firefox 15 이상, IE10에서 사용할 수 있습니다.