LearnApplyShare

[js] 소요시간 측정

January 31, 2019 - [js]

js 속도 튜닝이 필요할 경우 특별히 스크립트의 소요시간을 체크하고자 할 때 간단하게 사용할 수 있는 함수를 소개한다.

사용법

const timelog = require("./timelog")

timelog.start("sample task");

setTimeout(() => {
    timelog.check("1st 작업")
}, 200)

setTimeout(() => {
    timelog.check("2nd 작업")
}, 500)

setTimeout(() => {
    timelog.check("3rd 작업")
}, 900)

실행 결과

[START#48 13:21:34:511] sample task
[CHECK#48 13:21:34:721 +210ms / +210ms] 1st 작업
[CHECK#48 13:21:35:024 +303ms / +513ms] 2nd 작업
[CHECK#48 13:21:35:424 +400ms / +913ms] 3rd 작업

timelog.js

const createTimelog = function () {
    const newDate = function(){
        let t = new Date()
        let o = {
            HH: String(t.getHours()).padStart(2, "0"),
            mm: String(t.getMinutes()).padStart(2, "0"),
            ss: String(t.getSeconds()).padStart(2, "0"),
            SSS: String(t.getMilliseconds()).padStart(3, "0"),
            time: t.getTime()
        }
        return o;
    }

    let time = [];
    let seq = "#" + Math.floor(Math.random()*100)
    let o = {
        start: function (str) {
            let t = newDate();
            time = [t.time];
            console.log(`[START${seq} ${t.HH}:${t.mm}:${t.ss}:${t.SSS}] ` + str)
            
        },
        check: function (str) {
            let t = newDate();
            time.push(t.time)
            let diff = time[time.length - 1] - time[time.length - 2];
            let total = time[time.length - 1] - time[0];
            console.log(`[CHECK${seq} ${t.HH}:${t.mm}:${t.ss}:${t.SSS} +${diff}ms / +${total}ms] ` + str)
            return diff;
        }
    };
    return o;
}
const timelog = createTimelog();
timelog.new = createTimelog;

module.exports = timelog;

2가지 이상 작업단위에 대한 소요시간 체크

내부적인 단위업무에 대하여 별도로 시간을 체크하고자 할 경우에는 아래와 같이 객체를 새로 만들어서 사용할 수 있다.

const timelog = require("./timelog");

timelog.start("전체작업 시작")

let ta = timelog.new();
ta.start("A작업 시작");     // A작업 시간 별도 체크
// ~~ 중략 ~~
let tb = timelog.new();
tb.start("B작업 시작");     // B작업 시간 별도 체크

//~~ 중략 ~~
ta.check("A작업 끝")
//~~ 중략 ~~
tb.check("B작업 끝")

timelog.check("전체작업 끝")