본문 바로가기
카테고리 없음

date now 개선

by pishio 2025. 2. 21.

Date.now()는 밀리초 단위의 타임스탬프를 반환하지만, 내부적으로 시스템 타이머의 해상도와 JavaScript 엔진의 최적화에 따라 정확도가 제한될 수 있습니다. 특히 Android 환경에서는 Date.now()가 일정 주기마다 정렬(alignment)되는 과정에서 2~3ms 정도 튀는 현상이 발생할 수 있습니다.

더 높은 정밀도를 원한다면 다음 대안을 고려해 볼 수 있습니다.

1. performance.now()

Cordova에서 performance.now()를 사용하면 Date.now()보다 정밀한 시간을 얻을 수 있습니다.
• 마이크로초(μs) 단위의 해상도를 제공하며,
• Date.now()와 달리 시스템 시계(clock)의 조정 영향을 받지 않습니다.

console.log(performance.now());

하지만 performance.now()는 window.performance.timing.navigationStart를 기준으로 하기 때문에 절대 시간(UTC 타임스탬프)을 얻으려면 변환이 필요합니다.

const absoluteTime = Date.now() + (performance.now() - performance.timeOrigin);
console.log(absoluteTime);

2. Native 플러그인 활용 (Cordova Plugin)

더 정밀한 시스템 타이머를 원하면 Cordova 플러그인을 사용하여 네이티브 API에 접근할 수 있습니다.
예를 들어 cordova-plugin-device 플러그인을 사용하여 네이티브 시스템 시간을 가져올 수 있습니다.

cordova plugin add cordova-plugin-device

그리고 Java 또는 Kotlin에서 SystemClock.elapsedRealtimeNanos()를 활용하여 나노초 단위의 시간을 얻을 수도 있습니다.

3. WebAssembly 또는 네이티브 코드 호출

보다 정밀한 타이밍이 필요하다면, WebAssembly를 활용하여 네이티브 타이머 API를 직접 호출하는 방법도 고려해볼 수 있습니다.

결론

단순히 Date.now()보다 정확한 시간이 필요하다면 **performance.now()**를 사용하고,
절대 시간이 필요하다면 Date.now() + (performance.now() - performance.timeOrigin) 방식을 활용하면 됩니다.
하지만 하드웨어 수준의 정확한 타이머가 필요하면 네이티브 API를 직접 호출하는 Cordova 플러그인을 만들어야 합니다.

댓글