스포츠와 마찬가지로 어느 분야든 시간에 예민하다.
일반적인 스포츠라면 길어야 0.01초 단위까지 측정한다.
하지만 프로그램은 때에 따라서 ms(1/1000초)단위는 기본이고 ns 단위까지도 따져야하는 경우가 생긴다.
JS에서 처음 시간을 측정할 때는 아래와 같은 방법을 사용했다.
const MAX = 100_000_0000;
console.log("Date.now() 사용");
for(let i = 0; i < 10; i++){
const start = Date.now();
for (let i = 0; i < MAX; ++i) i & 1;
const end = Date.now();
console.log('duration :>> ', end - start);
}
// //////////////////////////////////
// Date.now() 사용
// duration :>> 480
// duration :>> 474
// duration :>> 471
// duration :>> 472
// duration :>> 470
// duration :>> 471
// duration :>> 471
// duration :>> 471
// duration :>> 470
// duration :>> 470
///////////////////////////////////
const MAX = 100_000_0000;
for(let i = 0; i < 10; i++){
const start = Date.now();
for (let i = 0; i < MAX; ++i) i & 1;
const end = Date.now()
console.log('duration :>> ', end - start);
}
// //////////////////////////////////
// Date.now() 사용
// duration :>> 637
// duration :>> 630
// duration :>> 628
// duration :>> 628
// duration :>> 629
// duration :>> 630
// duration :>> 635
// duration :>> 630
// duration :>> 629
// duration :>> 628
///////////////////////////////////
두 로직이 시간이 차이가 많이난다. 시간 차이가 날 만큼의 로직이 아니기에 그러면 안되는데…
그래서 성능 측정 방법이 정확한지에 대한 고민을 했다.
우선 Date.now() 방법이 정확하지 않다는 근거가 필요했고 구글링했다.
[javascript] 함수가 실행하는 데 걸리는 시간을 측정하는 방법
구글링 결과 결국 Date.now()와 console.time()이 1970년 1월 1일 자정(UTC)의 시간을 기반으로 하기에 정확하지 않다는 결론을 얻었고 대응책을 찾다가 perpomence라는 API를 발견했다.
최신 브라우저 및 Node.js 8.5버전 이상부터는 다 지원해준다.
Date.now()가 들어 갈 자리에 perpomence로 갈아끼워준다.
perpomence.now()는 마이크로 단위까지 나타내주기에 더 정확하다.
사용법은 아래와 같다.
const MAX = 100_000_0000;
console.log("perpomence.now() 사용");
for(let i = 0; i < 10; i++){
const start = performance.now();
for (let i = 0; i < MAX; ++i) i % 2 === 1;
const end = performance.now();
console.log('duration :>> ', end - start);
}
////////////////
// perpomence.now() 사용
// duration :>> 643.5240830183029
// duration :>> 636.6065409779549
// duration :>> 644.5139579772949
// duration :>> 640.8518750071526
////////////////
'Javascript' 카테고리의 다른 글
[Vite] 번들러 알아가기 (1) | 2023.02.17 |
---|---|
HTTP Header는 용량제한이 있을까? (0) | 2023.01.08 |
10분안에 문자인증 구현하기 (2) | 2022.12.25 |