У меня есть фрагмент кода JavaScript, который я выполняю с помощью node.js
интерпретатора.
for(var i = 1; i < LIMIT; i++) {
var user = {
id: i,
name: "MongoUser [" + i + "]"
};
db.users.save(user, function(err, saved) {
if(err || !saved) {
console.log("Error");
} else {
console.log("Saved");
}
});
}
Как я могу измерить время, затраченное на эти операции вставки базы данных? Я мог бы вычислить разницу значений даты после и до этого фрагмента кода, но это было бы неправильно из-за асинхронного характера кода.
javascript
node.js
profiling
Сторм Шэдоу
источник
источник
timerlog
что похоже на,console.time()
но с дополнительными функциями; github.com/brillout/timerlogОтветы:
Используйте Node.js
console.time()
иconsole.timeEnd()
:источник
Для этого есть метод. Проверьте process.hrtime (); ,
Итак, я в основном положил это в верхней части моего приложения.
Затем я использую его, чтобы узнать, сколько времени занимают функции. Вот базовый пример, который печатает содержимое текстового файла с именем «output.txt»:
Вот быстрый тест, который вы можете запустить в терминале (оболочка BASH):
источник
process.hrtime(start)
дважды? Есть ли для этого особая причина?При вызове
console.time('label')
будет записываться текущее время в миллисекундах, затем при последующем вызовеconsole.timeEnd('label')
будет отображаться продолжительность с этой точки.Время в миллисекундах будет автоматически напечатано рядом с меткой, поэтому вам не нужно делать отдельный вызов console.log для печати метки:
Для получения дополнительной информации см . Документы разработчика Mozilla
console.time
.источник
Удивило, что никто не упомянул новые встроенные библиотеки:
Доступно в Node> = 8.5 и должно быть в Modern Browers
https://developer.mozilla.org/en-US/docs/Web/API/Performance
https://nodejs.org/docs/latest-v8.x/api/perf_hooks.html#
Узел 8.5 ~ 9.x (Firefox, Chrome)
https://repl.it/@CodyGeisler/NodeJsPerformanceHooks
Узел 10.х
https://nodejs.org/docs/latest-v10.x/api/perf_hooks.html
источник
TypeError: performance.getEntriesByName is not a function
в Node v10.4.1Stability: 1 - Experimental
может быть? :) nodejs.org/docs/latest-v8.x/api/…Для тех, кто хочет получить значение прошедшего времени вместо вывода на консоль:
используйте process.hrtime () в качестве предложения @DDeriso, ниже мой более простой подход:
источник
источник
var start = process.hrtime(); ... var end = process.hrtime(start);
чтобы получить время с высоким разрешением (если мне нужно ожидать точность до миллисекунды)Старый вопрос, но для простого API и облегченного решения; Вы можете использовать perfy, который использует высокое разрешение в реальном времени (
process.hrtime
) для внутреннего использования.Обратите внимание, что каждый раз, когда
perfy.end(label)
вызывается, этот экземпляр автоматически уничтожается.Раскрытие: Написал этот модуль, вдохновленный ответом Д.Дерисо . Документы здесь .
источник
Вы можете попробовать Benchmark.js . Он поддерживает множество платформ, в том числе node.js.
источник
Вы также можете попробовать exectimer . Это дает вам обратную связь, как:
[править] Теперь есть даже более простой способ использовать exectimer, потому что теперь он может переносить код, который будет измеряться. Ваш код может быть упакован так:
источник
У меня была такая же проблема при переходе с AWS на Azure
Для экспресс & aws вы уже можете использовать существующие time () и timeEnd ()
Для Azure используйте это: https://github.com/manoharreddyporeddy/my-nodejs-notes/blob/master/performance_timers_helper_nodejs_azure_aws.js
Эти time () и timeEnd () используют существующую функцию hrtime (), которая обеспечивает высокое разрешение в реальном времени.
Надеюсь это поможет.
источник
И еще один вариант - использовать инструмент экспресс-отладки :
Удобно предлагает профилирующую панель:
Также. чтобы добавить к ответам выше, вы можете проверить этот ответ, чтобы включить любой профилирующий код только для среды разработки.
источник