원본 본문으로 이동하기

Javascript의 실행시간 측정을 위해 TimeStamp를 찍어보자

GOMJA - 다소 복잡한 요구사항때문에 자바스크립트의 실행시간을 일일히 측정해야될일이 생기게되면 여간 귀찮은게 아닙니다. 미리 디버그를 위해 타임스탬프를 찍는 함수를 만들어두면 편할것같아서 간단하게 작성해봤습니다. (간단한거 치고 100줄이 넘어가는게 함정) 스탬프찍는 순간도 귀찮은 분들에게 추천 마음대로 배포 / 편집하셔도 무방합니다 /* 사용법 */ /* - 스탬프 시작점 : TimeStamp.start(); - 스탬프 중간점 : TimeStamp.stamp(); // ID가 들어갈 수 있습니다.(대소문자구분X) // start 와 finish는 등록할 수 없습니다. 예약어 느낌 - 스탬프 종료 : TimeStamp.finish(); - 스탬프 시작 -> 종료 기간 출력 : TimeStamp.printResult(); - 모든 스탬프 출력 1) 시작점 - 각 스탬프들 : TimeStamp.printAll(true); ex) [Start -> track_0] , [Start -> track_1] 2) 각 스탬프들 사이의 시간 : TimeStamp.printAll(false); ex) [Start -> track_0] , [track_0 -> finish] - 특정 스탬프끼리 비교 : TimeStamp.compareWithId(start_id , end_id); ex) [track_0 -> track_3] - 특정 스탬프 가져오기 : TimeStamp.getStampWithId(id); */ var TimeStamp = { track : {}, tag : 0, state : 0, clear : function(){ this.track = {}; this.tag = 0; }, start : function(){ if(this.state == 0){ this.clear(); var _now = new Date(); this.state = 1; this.track["start"] = _now; } else{ throw "타임스탬프가 이미 실행중입니다."; } }, stamp : function(id){ if(this.state == 1){ var _stamp_id if(id != undefined){ if(id.toLowerCase() == "start" || id.toLowerCase() == "finish"){ throw "START 혹은 FINISH는 예약어입니다. 다른 이름으로 입력해주세요"; } else{ if(this.track[id] == undefined){ _stamp_id = id.toLowerCase(); } else{ throw "이미 등록된 id입니다"; } } } else{ _stamp_id = "track_" + this.tag; this.tag++; } this.track[_stamp_id] = new Date(); } else { throw "타임스탬프가 실행중이지 않습니다. 먼저 실행해주세요"; } }, finish : function(){ if(this.state == 1){ var _now = new Date(); this.state = 0; this.track["finish"] = _now; this.printResult(); } else{ throw "타임스탬프가 실행중이지 않습니다. 먼저 실행해주세요"; } }, getStampWithId : function(id){ if(id == undefined){ return undefined; } else{ return this.track[id.toLowerCase()]; } }, hasStamp : function(id){ if(id == undefined){ return undefined; } else{ return this.track[id.toLowerCase()] != undefined; } }, printResult : function(){ var _dStart = this.getStampWithId("start"); var _dFinish = this.getStampWithId("finish"); console.log("# 총 소요 : " + (_dFinish.getTime() - _dStart.getTime()) + "ms"); }, printAll : function(compare_with_start){ if(compare_with_start == true){ var _target = -1; console.log("## TIME STAMP RESULT ##"); for(var name in this.track){ if(_target == -1){ _target = this.track["start"]; continue; } else{ console.log("# [start -> "+name+"] : " + ((this.track[name]).getTime() - _target.getTime()) + "ms"); } } } else{ var _target_name = -1; console.log("## TIME STAMP RESULT ##"); for(var name in this.track){ if(_target_name == -1){ _target_name = name; continue; } else{ if(name == undefined){ break; } var _c1 = this.getStampWithId(_target_name); var _c2 = this.getStampWithId(name); var _ret = _c2.getTime() - _c1.getTime(); console.log("# ["+_target_name+" -> "+name+"] : " + _ret + "ms"); _target_name = name; } } } }, compareWithId : function(start_id , end_id){ if(!this.hasStamp(start_id) || !this.hasStamp(end_id)){ throw "비교할 객체가 존재하지 않습니다."; } else{ var _c1 = this.getStampWithId(start_id); var _c2 = this.getStampWithId(end_id); var _ret = _c2.getTime() - _c1.getTime(); console.log("# 결과 ["+start_id+" -> "+end_id+"] : " + _ret + "ms"); } } } - HTML 자바스크립트