Я относительно новичок в JS и пытался тестировать некоторый код (для изучения производительности различных алгоритмов), чтобы я мог просто увидеть, сколько времени занимает работа на моем терминале. Первоначально у меня было:
function benchmark(callback, name = `${callback+""}`) { // Convert callback to literal string if no name provided
console.log(`${name}`);
console.time("time");
console.log(`\t${callback}`);
console.timeEnd("time");
console.log('\n');
}
Однако я не получаю время, необходимое для запуска функции. Например, мой вывод показывает, что для нахождения шестого числа Фибоначчи требуется больше времени, чем для 50-го.
Пример 1:
function fib(n) {
if (n === 1 || n === 2) return 1;
return fib(n - 1) + fib(n - 2);
}
Когда я запускаю:
benchmark(fib(6), "fib(6) Rep 1"); // 0.5449770092964172ms
benchmark(fib(50), "fib(50) Rep 1"); // 0.004218995571136475ms
От fib(50)
до финала sh требуется больше времени, но измеренное время короче!
Модифицированный эталонный тест с помощью performance.now()
также не работает
Я столкнулся с той же проблемой выше если я использую performance.now()
.
const {performance} = require('perf_hooks');
function benchmark(callback, name = `${callback+""}`) {
let t0 = performance.now();
let result = callback;
let t1 = performance.now();
console.log(`\t${result}`);
console.log(`time: ${t1 - t0}ms`);
console.log('\n');
};
, я подозреваю, что таймеры останавливаются случайным образом или до завершения вызова. Должен ли я преобразовать обратный вызов в обещание и использовать .then
или await
? Или я упускаю что-то более фундаментальное в JS (например, событие l oop или стек вызовов)?
Я прошел через: