Существует метод, который предназначен для этого. Выезд process.hrtime();.
Итак, я в основном ставил это в верхней части моего приложения.
var start = process.hrtime();
var elapsed_time = function(note){
var precision = 3; // 3 decimal places
var elapsed = process.hrtime(start)[1]/1000000; // divide by a million to get nano to milli
console.log(process.hrtime(start)[0] + " s, " + elapsed.toFixed(precision) + " ms - " + note); // print message + time
start = process.hrtime(); // reset the timer
}
Затем я использую его, чтобы узнать, как долго выполняются функции. Вот простой пример, который печатает содержимое текстового файла с именем «output.txt»:
var debug = true;
http.createServer(function(request, response) {
if(debug) console.log("----------------------------------");
if(debug) elapsed_time("recieved request");
var send_html = function(err, contents) {
if(debug) elapsed_time("start send_html()");
response.writeHead(200, {'Content-Type': 'text/html' });
response.end(contents);
if(debug) elapsed_time("end send_html()");
}
if(debug) elapsed_time("start readFile()");
fs.readFile('output.txt', send_html);
if(debug) elapsed_time("end readFile()");
}).listen(8080);
Вот быстрый тест, который вы можете запустить в терминале (BASH оболочки):
for i in {1..100}; do echo $i; curl http://localhost:8080/; done
Просто прочитайте время начала перед вызовом db и время окончания INSIDE обратного вызова. – BFil
Существует вероятность того, что время, в течение которого БД заканчивает вставку и время выполнения обратного вызова, не совпадает, и это ввести ошибку в измерение? – Stormshadow
Нет, вам не стоит беспокоиться об этом, если код библиотеки db хорошо разработан и не обрабатывает какую-либо другую операцию перед запуском обратного вызова, вы должны получить хорошую оценку. Вы также можете профилировать вставку, помещая метки времени внутри кода библиотеки, где фактически выполняется вставка, а не ваша собственная, но, опять же, я бы не стал беспокоиться об этом. – BFil