반응형
해당 글은 Javascript 내에서 함수의 실행시간을 측정하는 방법들을 설명하는 글입니다.
1) Date()를 이용한 측정방식
💡 해당 방식은 함수 시작전에 도출한 new Date() 값과 함수 종료후에 도출한 new Date() 값을 이용하여 두개의 차이를 계산하여 함수 수행속도를 측정하는 방식입니다. 해당 방식은 '밀리초(ms)' 단위로 경과한 시간을 반환해 줍니다.
const fn_methodDate = () => {
let sum: number = 0;
let loopCnt: number = 10000000; // 루프 수행 횟수
const _startTime: number = new Date().getTime(); // 시작시간
for (let i = 0; i < loopCnt; i++) {
sum += i
}
const _endTime: number = new Date().getTime(); // 종료시간
console.log(`Result Time : ${_endTime - _startTime} ms`);
}
[참고] Date() API: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime
2) console.time() / console.timeEnd()를 이용한 측정방식
💡 해당 방식은 console.time() / console.timeEnd() 함수를 이용하여서 함수를 측정합니다.
서로간의 동일한 '라벨'을 체크해서 console.time() 시작점 부터 console.timeEnd() 종료점까지의 시간을 측정합니다.
해당 방식은 '밀리초(ms)' 단위로 경과한 시간을 반환해 줍니다.
[적용예시]
console.time("Performance Time")이라는 라벨을 사용하였습니다. 종료 시점의 시간을 확인해보려면 아래와 같이
console.endTime("Performance Time")이라는 라벨을 통해서 종료시점을 확인합니다.
const fn_methodConsole = () => {
let sum: number = 0;
let loopCnt: number = 10000000; // 루프 수행 횟수
console.time("Performance Time"); // 시작시간
for (let i = 0; i < loopCnt; i++) {
sum += i
}
console.timeEnd('Performance Time'); // 해당 부분에서 콘솔로 값을 리턴 받는다.
}
[참고] console.time() API: https://developer.mozilla.org/ko/docs/Web/API/console/time
필자는 React Native를 통해서 해당 함수를 사용해 봤을때, 아래와 같이 에러가 발생하였습니다.
React-native는 이를 제공해주지 않는것으로 확인되었습니다. 관련 문서는 하단의 stackoverflow 링크에 있습니다.
[Unhandled promise rejection: TypeError: console.time is not a function. (In 'console.time("time")', 'console.time' is undefined)]
at src/components/studymange/StudyManageMainScreen.tsx:122:34 in fn_performanceConsole
at src/components/studymange/StudyManageMainScreen.tsx:122:34 in fn_performanceConsole
at src/components/studymange/StudyManageMainScreen.tsx:86:9 in <anonymous>
at src/components/studymange/StudyManageMainScreen.tsx:86:9 in <anonymous>
at src/components/studymange/StudyManageMainScreen.tsx:86:9 in <anonymous>
[참고] React-native 관련 Stackoverflow 글 How to time a function in React Native?
3) performance.now()를 이용한 측정방식
💡 윈도우 내장함수로써 해당 함수를 실행시키면 ‘타임스탬프' 코드로 실행시간을 받으며, 밀리세컨드로 값을 반환 받는다.
해당 방식은 DOMHighResTimeStamp 타입의 '밀리초(ms)' 단위로 경과한 시간을 반환해 줍니다.
* 밀리초 단위로 주어진 시간은 5μs(마이크로초)까지 숫자의 소수 부분은 밀리초의 소수까지를 나타냅니다.
const fn_methodPerformance = () => {
let sum: number = 0;
let loopCnt: number = 10000000; // 루프 수행 횟수
const _startTime: number = performance.now(); // 시작시간
for (let i = 0; i < loopCnt; i++) {
sum += i
}
const _endTime: number = performance.now(); // 종료시간
console.log(`Result Time : ${_endTime - _startTime} ms`); // 최종 결과값 (ms)
}
[참고] performance.now() API: performance.now() - Web APIs | MDN
[참고] DOMHighResTimeStamp : https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp
오늘의 결론
제가 확인해 본 함수 실행시간 측정방법으로 3가지를 알아봤습니다.
이외에도 다양하고 정확하게 측정하는 방법이 존재 할것 같습니다. 읽고 계신분 중에 다른 측정방법이 있으면 댓글로 작성해주시면 감사합니다.
오늘도 감사합니다😀
반응형
'Javascript & Typescript > 이해하기' 카테고리의 다른 글
[TS] 타입스크립트(Typescript) 이해하기-3(타입스크립트의 사용목적) (0) | 2022.05.08 |
---|---|
[TS] 타입스크립트(Typescript) 이해하기-2 (의존성 관리, @types) (0) | 2022.04.17 |
[TS] 타입스크립트(Typescript) 이해하기-1 (정의, 동작원리, 특징) (0) | 2022.03.17 |
[JS] Promise 이해하기 -2 (Promise 체이닝, Promise.all, async/await) (0) | 2022.03.13 |
[JS] Promise 이해하기 -1 (콜백함수, 정의, 요청상태) (0) | 2022.03.12 |