Задать вопрос

Как многократно вычислять время выполнения функции?

Я ещё новичек. Так что не придирайтесь.
готовое решение не нужно, помогите понять где у меня косяки и как решить эту задачу )
var t = 0;
function Timer() {
         t = Timer();
  var now = new Date;
       

  function start(){
    return now;
    } 
      function stop(){
       var now2 = new Date;
         return now2.getMilliseconds() - now.getMilliseconds();  
    }     
         
       
         
};
start(t);
for (var i = 0; i < 100000; i++) {
  var arr = i * i * i;
}

stop(t);
       console.log(start());
  • Вопрос задан
  • 131 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Как однократно вычислить время выполнения функции:
var t0 = performance.now();
doSomething();
var t1 = performance.now();
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.");

Как это сделать многократно:
var t0, t1;
var results = [];

for (var i = 0; i < nTimes; i++) {
  t0 = performance.now();
  doSomething();
  t1 = performance.now();
  results.push(t1 - t0);
}

// если надо вывести результат
results.forEach(function(result, i) {
  console.log('Call to doSomething #' + (i + 1) + ' took ' + result + ' milliseconds.');
});


где doSomething - функция,
nTimes - количество итераций
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Косяков много. Начиная с того, что код не выполнится, т.к. функция start() не определена там, где её вызывают.

Время выполнения можно определить разными способами, но все они похожи по принципу: засекается текущее время перед выполнением, выполняется функция, засекается текущее время после выполнения. Разница между засеченными моментами можно считать примерно равным времени выполнения функции.

Несколько раз – несколько раз засекать-выполнять-засекать-вычетать.

Способы засечь время:
  1. создать новый объект Date, как вы и делаете. Можно писать короче: var now = new Date().getTime();
  2. использовать объект Performance и его метод performance.now(), как посоветовал Антон Спирин
  3. использовать методы объекта console: console.time() и console.timeEnd()
console.time('myFunc1'); // начало отсчёта
myFunction1( arg1, arg2); // измеряемая функция или кусок кода, for(...i < 100000...)
console.timeEnd('myFunc1'); // выведет в консоль время выполнения:
// myFunc1: 118ms
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы