문제

나는 날짜 개체를 만들어 일부 JavaScript 프로그램을 속도로 테스트하고 그것을 사용하여 기능의 실제 작업 전후에 밀리 초로 시간을 얻습니다. 나는 몸을 루프를 간단하게 추가 한 다음 끝이 새 MS에서 오래된 MS를 빼고 인쇄하는 것입니다. 그러나 모든 것이 0 밀리 초로 끝납니다. 이는 작업 전후에 쓰기로 확인하는 시간이 동일합니다. 내가 올바르게하고 있습니까? 그리고 JavaScript (Chrome)는 번개가 빠르거나 내 변수를 엉망으로 만드는 장면 뒤에있는 것들이 있습니까?

도움이 되었습니까?

해결책

날짜 객체는 시간이 밀리 초에서 시간을 반환하지만 실제로는 그 뒤에 타이머의 해상도가 아닙니다. 예를 들어, 타이머는 10ms마다 한 번씩 틱 할 수 있습니다. 프로세스에 3ms 만 걸리면 대부분의 시간에는 0이 아닌 측정이 표시되지 않습니다 (때로는 10ms가 표시됩니다).

해결책은 기능을 여러 번 실행하는 것입니다. 예를 들어, 백만 번 실행하고 총 시간을 1000000으로 나누어 평균 한 번의 실행 시간을 얻으십시오.

다른 팁

내 참조 이 질문에 대한 답변 간단한 벤치 마크 비교를 구현하는 방법. @Greg Hewgill이 지적했듯이 특정 테스트가 실제로 테스트하는 시간을 정확하게 표현하기 위해 테스트를 여러 번 실행하는 것이 중요합니다.

일반적으로 그것은 단순한 것과 같은 것으로 요약됩니다.

var MAX = 100000, i =  0, 
    s   = null,   e = null;

console.info("`someMethodToTest()` over %d iterations", MAX);
s = new Date();
do {
    someMethodToTest();
} while ( ++i < MAX );
e = new Date();

console.log("Total: %dms; average: %dms", +e - +s, (+e - +s) / MAX);

우리는 당신의 코드를 정말로 볼 필요가 있습니다. 어쨌든, 0의 가능한 이유는 루프가 비동기식으로 실행되기 때문입니다. 통역사는 다음 명령을 점프하기 전에 루프 끝까지 기다리지 않습니다. 또는 물론 루프는 빠르게 번개가 될 수 있습니다.

BTW, JavaScript 프로파일 러 사용에 관심이있을 수 있습니다. 개똥 벌레 Firefox에게는 좋은 것이 있습니다. 콘솔을 열고 칩 만 있으면됩니다 프로필.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top