데릭쉐퍼드와 afaq 실행 시간 (밀리초입니다.
>. 당초 지난 2008년 내가 이런 질문을 던졌다. 이 수락됨 오토메이티드 >. new 날짜 () 는 리게티메 () 는 다음 사용할 수 있지만, 우리는 이제 모두 동의할 수 있습니다. >. 표준 API 를 사용하는 것이 더 페퍼맨스트노프 () >. 적절한. 따라서 나는 수락됨 변경 될 수 있는 이 번호요.
var t0 = performance.now();
doSomething(); // <---- The function you're measuring time for
var t1 = performance.now();
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.");
>. '노데지스' : [임포트하십시오 '실적'] [2] 클래스용 데 필요한 것은
console.time('someFunction');
someFunction(); // Whatever is timed goes between the two "console.time"
console.timeEnd('someFunction');
, &Lt Note: br>, 문자열 기술입니까 시간 () '와' () '를' 전달하십시오 팀린드 메서드을 br>, (타이머 (timer) 에 대한 완료하십시오 예상대로) 제공합니다.* match< 합니다.
>. # '콘솔스타임 ()' 설명서. >. 1. [노데지스 문서 관련] [5] >. 2. 매든 (클라이언트측) 문서
[2]: https://nodejs.org/api/perf_hooks.html # perf_hooks_class_performance
[4]: https://console.spec.whatwg.org/ # 시간 [5]: https://nodejs.org/api/console.html # console_console_timeend_label
<script>
var a = performance.now();
alert('do something...');
var b = performance.now();
alert('It took ' + (b - a) + ' ms.');
</script>
작동하잖아 대상:
Firefox 15 - ++
크롬 24 ++
사파리 8 ++
오페라 15 ++
안드로이드 4.4 ++
[상술합니다 등] [2]
될 수 있지만, '' 콘솔스타임 당신꺼에요 # 39 의 비표준 it& &, sect.:
>. 이 기능은 표준 트랙 의 비표준 하지 않고 있다. 웹 사이트 운영에 대한 평면가공 사용하지 않음. 모든 사용자에게 적합한 작동하지 않습니다. 간 비호환성을 구축 및 비헤이비어를 클 수도 있어 향후 변경될 수 있습니다.
< hr>;
& rant> lt;;; 또한, , T '때문에' 를 사용하여 데이트였어 판매업체에서 DON& # 39 의 변화에 영향을 받는 것도 # 39 it& ", 시스템 time". , * 가 잘못된 결과를 얻을 수 있는 장점도 & " 제외어 timing" & 같은 mdash;;; mdash;; 사용자가 없는 doesn& # 39, 정확한 시스템 시간:
>. 10월 2014년 의 시스템 클럭, 내 헤이와이어 및 배리랑 갔다. 나는 내 모든 Gmail # 39 의 전자 메일을 열어 보고 , , ago&quo day& " 전송됩니까 *0 분. # 39; d 돌아보 구축할 수 있는 세계적인 기술자 및 I& 구글에서 Gmail 돼 있다.
(설정 시스템이 클록을 가서 1 년 전 Gmail 수 있도록 모두 좋은 웃음. 아마 언젠가는 우리는 홀 오브 셰임 의 JS '날짜').
'지금' () 구글 Spreadsheet& # 39 의 기능도 시달리고, 이 문제가 발생합니다.
[2]: http://caniuse.com/ # 검색 = 페퍼맨스트노프
현대의 모든 브라우저 자바스크립트 프로파일러 내장되어 있다. 이러한 프로파일러 줘야 할 때 가장 정확한 측정 function& 영향을 줄 수 있는 기존 코드를 수정할 필요가 없습니다 # 39 의 실행 시간.
프로필링하려면 너회의 JavaScript:
In 크롬 탭 관심용 JavaScript 를 선택하고 프로파일입니다 F12 수집하십시오 cpucomment 프로파일할 . In 버튼을 클릭한 후, Firefox, 설치 / 오픈 방화범 프로파일할.
, 또는 개발 시스템 상의 계기에서는 추가할 수 있습니다 데이터베이스에구성원을 코드와 '콘솔스타임 ()' 및 '콘솔스팀린드 ()'. 이러한 기능을 Firefox11+ 에서 지원되는 Chrome2+ 및 IE11+, 보고, 타이머 시작 / 정지점을 콘솔스타임 () '를 통해' 합니다. 시간 () '는' 및 '팀린드 인수로 사용자정의된 타이머 이름 ()' 에 대한 보고서를 이후 다음 실행 시간 타이머가 시작되었습니다.
function a() {
console.time("mytimer");
... do stuff ...
var dur = console.timeEnd("myTimer"); // NOTE: dur only works in FF
}
단, 소요 시간 ' ()' 에서 Firefox 되돌려줍니다 디렉토리에만 팀린드 가능하다. 단순히 보고하십시오 결과를 다른 브라우저 개발자 콘솔: 반환 값 '팀린드 ()' 가 정의되지 않았습니다.
function a() {
var start = new Date().getTime();
... do stuff ...
var end = new Date().getTime();
var dur = end - start;
}
그러나 '는 해상도 및 영향을 받는 모든 OS& # 39 초 객체에서만 날짜' 의 시스템 클럭 변경. 최근의 브라우저에서 there& # 39 의 더 나은 쪽을.
더 나은 옵션을 사용할 수 있다 고해상도 시간, 일명 '빈다우스페퍼맨스트노프 ()'. '지금' () 는 기존의 다테리게티메 () '가' 보다 중요한 두 가지 방법:
'지금' 은 두 번 () 와 서브밀리체런드 해결안에서는 수를 나타내는 밀리초입니다 시작된 이후 page& # 39 의 탐색. 이 수를 되돌려줍니다 분수 (fractional) 의 마이크로초 (예를 들어 값이 1000.123 는 1 초 ~ 123 마이크로초).
'지금 단조 ()' 가 있다. 이것은 아마도 앞으로 또는 뒤로 다테리게티메 못지않게 중요한 ' ()' 가 이동줄을 이어지는 것도 있다. 특히, 만약 OS& # 39 의 시스템 시간 업데이트되도록 (예를 들어 원자 시계 통기화를), '다테리게티메 ()' 도 업데이트하십시오. '지금 보장할 수 있도록 항상 단조 ()' 가 크게 영향을 받지 않은 OS& # 39 의 it 시스템 시간 - 항상 시간 벽 시계 (단 시간이 없는 벽에 () 이다.).
'지금' () 에서 이용할 수 있는 거의 모든 배치하십시오 리게티메 () ',' + '새 날짜 () 는 새로운 날짜' 앤트 다테오노프 () '이'. 단, t '와' 지금 '데이트였어 don& # 39 번 ()' 로 혼합, bsbab-unix 된다 '는' 날짜를 기준으로 (밀리초입니다 수가 1970년 이후), '지금' 동안 () 는 밀리초입니다 수가 있으므로 페이지 탐색 시작 (그렇게 되리라 비해 매우 작은 '날짜').
예를 들어 '지금 here& # 39 의 사용 방법 ()'.
function a() {
var start = window.performance.now();
... do stuff ...
var end = window.performance.now();
var dur = end - start;
}
크롬, 파이어폭스 () 는 '지금' 에서 안정적인 15+ 및 IE10. 폴리필스 를 사용할 수 있는 여러 가지가 있습니다.
다른 한 가지 옵션을 측정하기 위한 실행 시간 (the wild) 는 우저티밍 *. 비슷하게 동작하는 우저티밍 콘솔스타임 콘솔스팀린드 () ',' () '와' 하지만 '지금' 은 그 같은 고해상도 시간스탬프와 () 는 (so you get a 단조 서브노드 밀리초 원거리일수록 클럭) 의 페퍼맨스티멀린 및 기간, 그리고 타임스탬프에 저장합니다.
마크 (스타르마크나미) ',' 타임스탬프로 저장하라는 전화하시기. 얻을 수 있으므로 1 시간 측정 (미수렌임, 스타르마크나미) ',' 호출하십시오 표시하시겠습니까 됩니다. 이 기간은 저장할 수 있는 함께 페퍼맨스티멀린 너회의 자국이야.
function a() {
window.performance.mark("start");
... do stuff ...
window.performance.measure("myfunctionduration", "start");
}
// duration is window.performance.getEntriesByName("myfunctionduration", "measure")[0];
우저티밍 IE10+ 및 Chrome25+ 알 수 있다. 또한 폴리필 를 사용할 수 있는 (어떤 난 작성했습니까).
정확한 값을 얻으려면 콩지름에 성능 인터페이스입니다. 오페라, 파이어폭스, 크롬, s # 39 에서 지원되는 it& 현대 버전의 IE. # 39 의 사례를 here& 사용할 수 있습니다.
var performance = window.performance;
var t0 = performance.now();
doWork();
var t1 = performance.now();
console.log("Call to doWork took " + (t1 - t0) + " milliseconds.")
() '또는' () '' 다테리게티메 콘솔스타임 정확히까지 실행 시간을 측정하기 위해 좋지 않다. 포락선으로 사용할 수 있습니다) 은 빠른 경우 황삭 추정치입니다 당신꺼에요. 그러니까 ms 에서 실시간 shift+ctrl 15 60 황삭 추정치입니다 통해 얻을 수 있습니다.
이 찬란한 후 의 JavaScript 에서 실행 시간을 측정하는 확인란. 저자는 몇 시간, 읽을 만한 가치가 JavaScript 의 정밀도에는 대한 링크가 있습니다.
var StopWatch = function (performance) {
this.startTime = 0;
this.stopTime = 0;
this.running = false;
this.performance = performance === false ? false : !!window.performance;
};
StopWatch.prototype.currentTime = function () {
return this.performance ? window.performance.now() : new Date().getTime();
};
StopWatch.prototype.start = function () {
this.startTime = this.currentTime();
this.running = true;
};
StopWatch.prototype.stop = function () {
this.stopTime = this.currentTime();
this.running = false;
};
StopWatch.prototype.getElapsedMilliseconds = function () {
if (this.running) {
this.stopTime = this.currentTime();
}
return this.stopTime - this.startTime;
};
StopWatch.prototype.getElapsedSeconds = function () {
return this.getElapsedMilliseconds() / 1000;
};
StopWatch.prototype.printElapsed = function (name) {
var currentName = name || 'Elapsed:';
console.log(currentName, '[' + this.getElapsedMilliseconds() + 'ms]', '[' + this.getElapsedSeconds() + 's]');
};
벤치마트
var stopwatch = new StopWatch();
stopwatch.start();
for (var index = 0; index < 100; index++) {
stopwatch.printElapsed('Instance[' + index + ']');
}
stopwatch.stop();
stopwatch.printElapsed();
출력입니다
Instance[0] [0ms] [0s]
Instance[1] [2.999999967869371ms] [0.002999999967869371s]
Instance[2] [2.999999967869371ms] [0.002999999967869371s]
/* ... */
Instance[99] [10.999999998603016ms] [0.010999999998603016s]
Elapsed: [10.999999998603016ms] [0.010999999998603016s]
[페퍼맨스트노프 ()] [1] 선택적입니다 - 그냥 지나칠 초시계 구성자를 거짓값 를 지원한다.
[1]: //updates.html5rocks.com/2012/08/when-milliseconds-are-not-enough-performance-now http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-nowhttp
또한 여기서 연산자 추가 사용할 수 있습니다.
var start = +new Date();
callYourFunctionHere();
var end = +new Date();
var time = end - start;
console.log('total execution time = '+ time + 'ms');
console.timeEndValue = function(label) { // Add console.timeEndValue, to add a return value
var time = this._times[label];
if (!time) {
throw new Error('No such label: ' + label);
}
var duration = Date.now() - time;
return duration;
};
지금 같은 코드를 사용할 수 있습니다.
console.time('someFunction timer');
someFunction();
var executionTime = console.timeEndValue('someFunction timer');
console.log("The execution time is " + executionTime);
, 이 < br> 능력 향상 가능성. 이 같은 용도로 사용할 수 있는 실행 시간을 저장할 수 있고 더 사용하여 데이터베이스에 저장된 방정식 또는 원격 클라이언트, 웹 페이지 등) 를 통해 전송되는 웹 소켓 지냈다.
정보기술 (it) 과 정보기술 (it) 을 사용하여 향상시키십시오 운영까지도.
Performance: {
Timer: {},
Start: function (name) {
if (console && console.time) {
console.time(name);
} else if (window.performance.now) {
this.Timer[name] = window.performance.now();
} else {
this.Timer[name] = new Date().getTime();
}
},
End: function (name) {
if (console && console.time) {
console.timeEnd(name);
} else {
var result;
if (window.performance.now) {
result = window.performance.now() - this.Timer[name];
} else {
result = new Date().getTime() - this.Timer[name];
}
console.log(name + ": " + result);
}
}
}
S # 39 시간 함수를 위한 here& 디자이너이다.
let timed = (f) => (...args)=>{
let start = performance.now();
let ret = f(...args);
console.log(`function ${f.name} took ${(performance.now()-start).toFixed(3)}ms`)
return ret;
}
사용법:
let test = ()=>{/*does something*/}
test = timed(test) // turns the function into a timed function in one line
test() // run your code as normal, logs 'function test took 1001.900ms'
답변 고마워요, 아힘 코엘너 확장하십시오 약어입니다 했다.
var t0 = process.hrtime();
//Start of code to measure
//End of code
var timeInMilliseconds = process.hrtime(t0)[1]/1000000; // dividing by 1000000 gives milliseconds from nanoseconds
제발, 참고, 아무것도 할 수 있는 외에, t # 39 shouldn& 뭐로부터요 측정하려는 (예를 들어, '또' 콘솔드로그 실행하십시오 테스트 및 성능에 영향을 줄 수 시간 소요).
참고, 비동기 함수 실행 시간 측정 의해 위해서는 합니다 ',' 삽입하십시오 팀인밀리제콘즈 = 프로세스트라타임 (t0) [1] /1000000 콜백하는 내부에서 var. 예를 들어,
var t0 = process.hrtime();
someAsyncFunction(function(err, results) {
var timeInMilliseconds = process.hrtime(t0)[1]/1000000;
});
몇 달 전에 내가 내 스스로 다테오노프 () 함수를 사용하여 시간을 함께 넣을 수 있는 일상적인 경우에도 것으로 당시 수락됨 메서드로부터 페퍼맨스트노프 () - - 성능은 아직 사용할 수 있기 때문에 객체인지 (내장형) 안정적 node. js 릴리스부터.
오늘은 좀 더 하고 산 · 학 · 연 것은 http://support. 위한 또 다른 방법은 타이밍. 난 또 이후 node. js 파일을 공유할 수 있는 코드를 생각해봤죠 꼭 이래야겠어요 목마르겠구나 사용 방법
다음은 참조용이므로 결합됨 [w3c] 에서 제공한 (https://w3c.github.io/performance-timeline/) 및 [node. js] (https://nodejs.org/api/perf_hooks.html # perf_hooks_class_performance):
function functionTimer() {
performance.mark('start')
functionToBeTimed()
performance.mark('end')
performance.measure('Start to End', 'start', 'end')
const measure = performance.getEntriesByName('Start to End')[0]
console.log(measure.duration)
}
사용하려면 '실적' 객체의 node. js 다음과 같은 애플리케이션 (앱) 을 필요로 합니다. "' const 필요한 (& # 39, perf_hooks& # 39;) {} = 성능 "'
스케쳐내 사이의 시간을 측정할 수 있는 여러 사항을 aren&, t # 39 이 네스트된 사용할 수 있습니다.
function timer(lap){
if(lap) console.log(`${lap} in: ${(performance.now()-timer.prev).toFixed(3)}ms`);
timer.prev = performance.now();
}
파란색 선 () 에서 이 같은 경우 콘솔스타임 대신 사용할 수 있습니다.
console.log(`${lap} in: %c${(performance.now()-timer.prev).toFixed(3)}ms`, 'color:blue');
< > -;;!
// Usage:
timer() // set the start
// do something
timer('built') // logs 'built in: 591.815ms'
// do something
timer('copied') // logs 'copied in: 0.065ms'
// do something
timer('compared') // logs 'compared in: 36.41ms'
export default class Singleton {
static myInstance: Singleton = null;
_timers: any = {};
/**
* @returns {Singleton}
*/
static getInstance() {
if (Singleton.myInstance == null) {
Singleton.myInstance = new Singleton();
}
return this.myInstance;
}
initTime(label: string) {
this._timers[label] = Date.now();
return this._timers[label];
}
endTime(label: string) {
const endTime = Date.now();
if (this._timers[label]) {
const delta = endTime - this._timers[label];
const finalTime = `${label}: ${delta}ms`;
delete this._timers[label];
return finalTime;
} else {
return null;
}
}
}
관련된 니티메 'string'.
'반품하십시오 트리니티메 싱글턴스게틴스턴스 () (레이블). 시간을 되돌려줍니다 초기화 '//
'반품하십시오 트렌트티메 싱글턴스게틴스턴스 () (레이블). 초기화 및 끝 '사이에 총 시간 되돌려줍니다 //
제 경우에는 내가 사용할 수 있는 바벨 수거 퍼페르 @ 문법 및 컴파일합니다. 이 방법은 δ1 객체에는 기능을 하는 문제가 될 수 있다.
Js 코드 예제
function timer() {
return (target, propertyKey, descriptor) => {
const start = Date.now();
let oldFunc = descriptor.value;
descriptor.value = async function (){
var result = await oldFunc.apply(this, arguments);
console.log(Date.now() - start);
return result;
}
}
}
// Util function
function delay(timeout) {
return new Promise((resolve) => setTimeout(() => {
resolve();
}, timeout));
}
class Test {
@timer()
async test(timout) {
await delay(timout)
console.log("delay 1");
await delay(timout)
console.log("delay 2");
}
}
const t = new Test();
t.test(1000)
t.test(100)
이바베르크 (backup-to-disk 바벨 6)
{
"plugins": [
"transform-decorators-legacy"
]
}
수행됨 서버 및 클라이언트 (노드입니다 또는 DOM) 는 '실적' 제공한다. 예를 들어 있는 작은 주기 여러 개 있을 때 잘 처리할 수 있는 함수 호출 1000년 배 1000년 데이터 객체뿐 확장하지만 보고 싶은 이 함수는 각각 어떻게 작업을 자도으로 최대 채웠다.
그래서 이 번호요 글로벌 (한원소 집합) 는 모듈에서는 타이머. 같은 클래스 싱글턴 패턴, 그냥 조금 간단해진다는 사용할 수 있지만, 이를 '예' 스토프와치.j스 필요한 별도의 파일.
"'javascript const 성능 " undefined" 메리 페로프 성능! = =;; ? 성능: 스페퍼먼스, 필요한 (& # 39, perf_hooks& # 39;) const 자리 = 2.
이제 _timers = {};
const _log = (label, 델타?) = >. { if (_timers [레이블에만]) { 콘솔드로그 ('레이블에만 $ {}: '+ (델타? $ {} 밀리초입니다 델타스토피스트 (숫자), '마지막': & # 39, & # 39;) + '$ {_timers [레이블에만] 네스토탈스토피스트 (숫자), 총 $ {}} 밀리초입니다 _timers [레이블에만] 스키클레스 주기'); } };
const 익스포트합니다 초시계 = { 시작 (레이블) { 이제 = 페르f.노프 상수 (); if (_timers [레이블에만]) { if (_timers! [레이블에만] 오스타르드) { [레이블에만] 오스타르드 _timers = 이제. } } else { _timers [레이블에만] = { 시작되었다. 이제 합계: 0, 사이클: 0 }; } } / 되돌려줍니다 초시계 doesn& 경우 총 경과 밀리초입니다 또는 null # 39, t 존재합니다. / 정지점을 (label 기록하십시오 = false) { 이제 = 페르f.노프 상수 (); if (_timers [레이블에만]) { 델타 하겠습니다. if (_timers [레이블에만] 오스타르드) { [레이블에만] = 이제 변동분 _timers 오스타르드. [레이블에만] _timers 오스타르드 = null; [레이블에만] + = _timers 네스토탈 델타. [레이블에만] _timers .cycles++. } 로그 & &; _log (label, delta). [레이블에만] _timers 반품하십시오 네스토탈. } else { 반품하십시오 nulll. } } / 로깅합니다 총 시간 / 로그: _log, 삭제 (레이블) { _timers 삭제하시겠습니까 [레이블에만]; } }; "'