Mi chiedevo se è possibile misurare il tempo necessario per completare una richiesta HTTP utilizzando node.js. Modificando leggermente un esempio dalla documentazione (here), si può facilmente scrivere il seguente codice. Tempo di misurazione su richieste HTTP node.js
var http = require('http');
var stamp1 = new Date();
var stamp2, stamp3, stamp4;
var options = {
hostname: 'www.google.com',
port: 80,
path: '/upload',
method: 'POST'
};
var req = http.request(options, function(res) {
stamp3 = new Date();
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
res.on('end', function() {
stamp4 = new Date();
console.log ("Stamp 3: " + stamp3);
console.log ("Stamp 4: " + stamp4);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('data\n');
req.write('data\n');
req.end();
stamp2 = new Date();
console.log ("Stamp 1: " + stamp1);
console.log ("Stamp 2: " + stamp2);
Ora lasciami venire al mio punto. Sulla risposta si può facilmente misurare il tempo necessario per la risposta, poiché all'inizio viene impostato timbro3 e viene impostato il timbro di fine 4. Quindi, in linea di principio per quantità relativamente grandi di dati, questi due timestamp saranno diversi.
Tuttavia, la domanda che ho è se i timbri 1 e 2 misurano effettivamente ciò che accade quando la richiesta viene preparata e inviata. In altre parole, req.write (....) è un'operazione sincrona? Basandomi sui principi node.js, mi aspetterei che req.write (...) sia un'operazione asincrona in cui si può passare un documento arbitrariamente grande e quindi, una volta completato con successo, si può avere un callback sapendo che la richiesta è terminata.
Commenti?
si consiglia di creare una funzione di utilità per eseguire la misura e si può ottenere un vero e proprio d uscire usando 'Date.now()' sottraendo il secondo timestamp dal primo timestamp. Si noti inoltre che è possibile misurare in nanosecondi con [process.hrtime] (http://nodejs.org/api/process.html#process_process_hrtime). –
Grazie, mi piace il suggerimento process.hrtime perché non ne ero a conoscenza! A partire dalla sottrazione, questo è precisamente il mio punto alla fine per la misurazione effettiva. – MightyMouse