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

고해상도 타이머+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에서 사용할 수 있습니다.