Как правильно замерять время выполнения последовательных скриптов JS?
Вот например скрипт на расчет факториала (прошу простить за возможные косяки - это мой первый вопрос на данном сайте).
<script>
var x = x2 = +prompt('Enter value');
// Вычисление факториала без использования цикла
var time = performance.now();
function factorial(x){
if (x<=1) return 1;
return x*factorial(x-1);
}
time = performance.now() - time;
alert(' factorial=' + factorial(x) + '\n Время вып. СКРИПТА с помощью функции = ' + time.toFixed(5));
// Вычисление факториала с использованием цикла
let i=x2;
var time2 = performance.now();
for (i;i>1;i--) {
x2*=(i-1);
}
time2 = performance.now() - time2;
alert(' factorial=' + x2 + '\n Время вып. СКРИПТА с помощью цикла = ' + time2.toFixed(5));
</script>
Но есть уверенность, что время выполнения каждого скрипта выводит не правильное. При отключении 1-го вычисления факториала через функцию, почему-то меняется время выполнения 2-го вычисления через цикл. Подскажите где копать?
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Извините что с телефона.
var x = x2 = +prompt('Enter value');
// Вычисление факториала без использования цикла
function factorial(x) {
if (x <= 1) return 1;
return x * factorial(x - 1);
}
var time = performance.now();
var factorialX = factorial(x);
time = performance.now() - time;
console.log(' factorial=' + factorialX + '\n Время вып. СКРИПТА с помощью функции = ' + time.toFixed(5));
// Вычисление факториала с использованием цикла
let i = x2;
var time2 = performance.now();
for (i; i > 1; i--) {
x2 *= (i - 1);
}
time2 = performance.now() - time2;
console.log(' factorial=' + x2 + '\n Время вып. СКРИПТА с помощью цикла = ' + time2.toFixed(5));
У вас вычисление с факториалом не много не верно, я поправил. Нужно замерять время между вызовами а не определениями.
Автор решения: vp_arth
→ Ссылка
- Нужно аккуратнее расставлять отметки времени(вокруг тестируемого кода)
- Такой простой код нужно выполнять многократно, иначе вы будете тестировать случайные факторы, а не код
let n = 25, N = 1000000;
// Вычисление факториала без использования цикла
function factorial(x){
if (x<=1) return 1;
return x*factorial(x-1);
}
let time = performance.now(); // start
let f1;
for (let i = 0; i < N; ++i) {
f1 = factorial(n); // call
}
time = performance.now() - time; // end
console.log(' factorial=' + f1 + '\n Время вып. СКРИПТА с помощью функции = ' + time.toFixed(5));
// Вычисление факториала с использованием цикла
let time2 = performance.now();
let x = n, x2;
for (let i = 0; i < N; ++i) {
x2 = x;
for (let k=n;k>1;k--) {
x2 *= (k-1);
}
}
time2 = performance.now() - time2;
console.log(' factorial=' + x2 + '\n Время вып. СКРИПТА с помощью цикла = ' + time2.toFixed(5));