Тестирование выполнения JavaScript с помощью функций обратного вызова - PullRequest
1 голос
/ 30 марта 2012

У меня есть некоторый JavaScript, который я пытаюсь сравнить с временем выполнения.

Проблема в том, что цикл for завершается быстро, а выполнение метода Item.save () еще не завершено.

Какие-нибудь предложения, как рассчитать время, учитывающее полное время выполнения в содержимом цикла?

Спасибо!

var start = new Date().getTime();
var Item = new Item();
for (i = 0; i < 500; i++) {
  var item = {};
  item.name = 5;
  item.id = 10;
  item.set = [];
  Item.save(item, function (err, res) {
    console.log(res);
  });
}
var elapsed = new Date().getTime() - start; 
console.log(elapsed);

РЕДАКТИРОВАТЬ: Это на сервере nodejs.

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Просто используйте Инструменты профилирования Chrome . Они дают вам полное представление о том, сколько процессорного времени занимает каждый вызов функции на вашей странице:

http://code.google.com/chrome/devtools/docs/cpu-profiling-files/two_profiles.png


Для Node, вы можете попробовать node-inspector , экспериментальный профилировщик.

0 голосов
/ 30 марта 2012

Ответ прост: создайте тестовый пример jsPerf .Он позволяет запускать асинхронные или «отложенные» тесты.

В качестве альтернативы вы можете использовать Benchmark.js и настроить отложенный тестовый пример вручную.

Не просто сравниватьдве new Date метки времени, так как это работает только для синхронных тестов.(Кроме того, это не точный способ измерения параметров во всех браузерах и устройствах .)

0 голосов
/ 30 марта 2012

Лучший способ справиться с этим - изменить функцию Item.save (), чтобы она принимала время начала, а затем выполнить сравнение в самом конце.Или реализуйте функцию обратного вызова (succes :) для Item.save ().

...