Die Zeitdauer verschiedener Stufen einer HTTP/S -Anforderung wie DNS -Lookup, TLS -Handshake, Zeit bis zum ersten Byte usw. Ähnlich wie der Zeitbefehl, der die Prozesszeiten misst, misst der nettime -Befehl HTTP/s -Anforderungszeiten. Weitere Informationen finden Sie im Verständnis und zum Messen von HTTP -Zeiten mit node.js.
Achtung : Befehlszeilenoptionen verändert sich zwischen 0.x- und 1.x-Versionen, so dass sie mit Curl kompatibel werden. Wenn Sie das nettime Command-Line-Tool verwenden, überprüfen Sie die betroffenen Optionen:
-e, --ignore-certificate => -k, --insecure
-u, --unit => -t, --time-unit
-U, --user => -u, --user
Die programmatische Schnittstelle änderte sich nicht und blieb kompatibel.
Stellen Sie sicher, dass Sie Node.js> = 14.8 installiert haben. Installieren Sie das nettime -Paket weltweit und drucken Sie die Zeiten einer Beispiel -Website aus:
$ npm install -g nettime
$ nettime https://www.google.com
Phase Finished Duration
-----------------------------------
Socket Open 0.023s 0.023s
DNS Lookup 0.024s 0.001s
TCP Connection 0.053s 0.029s
TLS Handshake 0.133s 0.079s
First Byte 0.174s 0.041s
Content Transfer 0.176s 0.002s
Socket Close 0.177s 0.001s
-----------------------------------
Status Code: OK (200) Ausführen von nettime ohne Parameter druckt die Nutzungsanweisungen aus:
Usage: nettime [options] <URL>
Options:
-V, --version output the version number
-0, --http1.0 use HTTP 1.0
--http1.1 use HTTP 1.1 (default)
--http2 use HTTP 2.0
-c, --connect-timeout <ms> maximum time to wait for a connection
-d, --data <data> data to be sent using the POST verb
-f, --format <format> set output format: text, json, raw
-H, --header <header> send specific HTTP header
-i, --include include response headers in the output
-I, --head use HEAD verb to get document info only
-k, --insecure ignore certificate errors
-L, --location follow redirects
-o, --output <file> write the received data to a file
-t, --time-unit <unit> set time unit: ms, s+ns
-u, --user <credentials> credentials for Basic Authentication
-X, --request <verb> specify HTTP verb to use for the request
-C, --request-count <count> count of requests to make (default: 1)
-D, --request-delay <ms> delay between two requests
-A, --average-timings print an average of multiple request timings
-h, --help output usage information
The default output format is "text" and time unit "ms". Other options
are compatible with curl. Timings are printed to the standard output.
Examples:
$ nettime -f json https://www.github.com
$ nettime --http2 -C 3 -A https://www.google.com
Stellen Sie sicher, dass Sie node.js> = 14.8 verwenden. Installieren Sie das nettime -Paket lokal und erhalten Sie Zeitdauer des Wartens auf die Antwort und Herunterladen des Inhalts einer Beispiel -Webseite:
npm install --save nettime const { nettime , getDuration } = require ( 'nettime' )
nettime ( 'https://www.google.com' )
. then ( result => {
if ( result . statusCode === 200 ) {
let timings = result . timings
let waiting = getDuration ( [ 0 , 0 ] , timings . firstByte )
let downloading = getDuration ( timings . firstByte , timings . contentTransfer )
console . log ( 'Waiting for the response:' , nettime . getMilliseconds ( waiting ) + 'ms' )
console . log ( 'Downloading the content:' , nettime . getMilliseconds ( downloading ) + 'ms' )
}
} )
. catch ( error => console . error ( error ) ) Das Hauptmodul exportiert eine Funktion, die eine HTTP/s -Anfrage ermöglicht und ein Versprechen an das Ergebnisobjekt zurückgibt. Die Funktion führt zu nettime , getDuration , getMilliseconds und isRedirect , so dass der Export auch mit mehreren statischen Funktionen als Objekt konsumiert werden kann:
const nettime = require ( 'nettime' )
const { nettime , getDuration } = require ( 'nettime' )Das Eingabeargument ist eine Zeichenfolge mit einer URL, die die Anforderung mit oder ein Objekt mit mehreren Eigenschaften erstellt.
Das Eingabeobjekt kann enthalten:
url : String mit einer URL, um die Anfrage mit zu stellen.credentials : Objekt mit username und password -Zeichenfolgeneigenschaften für die Formatierung der grundlegenden Authentifizierung HTTP -Header.data : String oder Puffer, um mit dem HTTP-Verb POST an den Server zu senden und standardmäßig die Inhaltstypanwendung application/x-www-form-urlencoded .failOnOutputFileError : Boolean zur Verhinderung des Ausfalls des Anforderungszeitpunkts, wenn das Schreiben in die Ausgabedatei fehlgeschlagen ist. Wenn auf false festgelegt wird, wird der Fehler auf der Standardausgabe gedruckt und der Prozess -Exit -Code wird auf 2 eingestellt. Er ist nur dann wirksam, wenn outputFile angegeben ist. Der Standard ist true .headers : Objekt mit Headernamen als Zeichenfolgeschlüssel und Headerwerte als Zeichenfolgewerte.httpVersion : String mit der Protokollversion ('1.0', '1.1' oder '2.0'), die an den Server gesendet werden soll. (Node.js HTTP-Unterstützung ist für 1.1 hart codiert. Es kann nur auf der Serverseite einen Unterschied zwischen 1.0 und 1.1 geben. Node.JS unterstützt HTTP/2 in der Version 8.4.0 oder neuer mit der Option-EXPONS-HTTP2-LIME-Option von Version 8.8.1 oder Neue Out-of-th-th-th-the-opt.followRedirects : Boolean, um weiterhin Anforderungen zu stellen, wenn die ursprüngliche Antwort einen Umleitungs -HTTP -Statuscode enthieltincludeHeaders : Boolean für die Einbeziehung von headers ( Object ) in Antwortheader in das versprochene Ergebnisobjekt. Wenn outputFile angegeben ist, werden auch die Header an den Beginn der Ausgabedatei geschrieben.method : HTTP -Verb in der HTTP -Anfrage verwendet; GET ist die Standardeinstellung, es sei denn -i oder -d nicht festgelegt.outputFile : Dateipfad zum Schreiben der empfangenen Daten auf.rejectUnauthorized : Boolean, um die Beendigung der HTTPS -Anfrage zu verweigern, ist auf true (der Standard) festgelegt, wenn die Validierung des Website -Zertifikats fehlschlägt. Wenn Sie es auf false festlegen, wird die Anforderung Zertifikat Fehler ignorieren.returnResponse : Boolean zur Einbeziehung der response ( Buffer ) mit den empfangenen Daten im versprochenen Ergebnisobjekt.requestCount : Ganzzahl für die Erstellung mehrerer Anfragen anstelle von einem.requestDelay : Integer, um eine Verzögerung (in Millisekunden) zwischen den beiden Anfragen einzuführen. Der Standard ist 100.timeout : Intere, um die maximale Zeit (in Millisekunden) festzulegen. Eine einzige Anfrage sollte vor dem Abtasten erfolgen.Das Ergebnisobjekt enthält:
httpVersion : HTTP -Version, mit der der Server (String) reagierte.statusCode : HTTP -Statuscode der Antwort (Ganzzahl).statusMessage : HTTP -Statusnachricht für den Statuscode (Zeichenfolge).timings : Objekt mit Timingeigenschaften aus verschiedenen Phasen der Anfrage. Das Timing ist ein Array mit zwei Ganzzahlen - Sekunden und Nanosekunden, die seit dem Antrag gestellt wurden, wie durch den Prozess zurückgegeben.headers : Ein optionales Objekt mit den Antwortheadern, falls von der Option includeHeaders .url : Eine optionale Zeichenfolge mit der angeforderten URL, wenn die Option followRedirects auf true festgelegt wurde. {
"httpVersion" : '1.1' ,
"statusCode" : 200 ,
"statusMessage" : "OK" ,
"timings" : {
"socketOpen" : [ 0 , 13260126 ] ,
"dnsLookup" : [ 0 , 13747391 ] , // Optional, if hostname was specified
"tcpConnection" : [ 0 , 152135165 ] ,
"tlsHandshake" : [ 0 , 433219351 ] , // Optional, if HTTPS protocol was used
"firstByte" : [ 1 , 888887072 ] ,
"contentTransfer" : [ 1 , 891221207 ] ,
"socketClose" : [ 1 , 893156380 ]
}
} Wenn der Option requestCount größer als 1 ist, werden die Ergebnisobjekte in einem Array mit derselben Länge wie der requestCount -Wert zurückgegeben. Wenn die Option followRedirects uns auf true eingestellt ist, werden die Ergebnisobjekte in einem Array der Länge zurückgegeben, abhängig von der Anwesenheit und der Anzahl der Umleitungsreaktionen.
HINWEIS : Der Parameter time-unit betrifft nicht nur das Ausgangsformat "Text" des Befehlszeilenskripts, sondern auch das "JSON". Wenn Sie auf "MS" gesetzt sind, werden die Timingwerte in Millisekunden gedruckt. Wenn Sie auf "S+NS" gesetzt sind, werden die Timings als Arrays im Prozess der Time -Format gedruckt. Das programmgesteuerte Aufruf der nettime -Funktion gibt die Zeiten immer als Arrays im Prozess der STRIME -Format zurück.
Die folgenden Funktionen werden als genannte Exporte aus dem nettime/lib/timings -Modul genannt, um den Umgang mit dem Timing -Format und den Timings von SHRTIME aus mehreren Anfragen zu unterstützen:
getDuration(start, end) : Berechnet den Unterschied zwischen zwei Timings. Erwartet zwei Arrays im Prozess. Das Format der STIME und kehrt das Ergebnis als Array im selben Prozess zurück.getMilliseconds(timing) : Umwandelt das Timing in Millisekunden. Erwartet ein Array im Prozess. Das Format der Time und gibt das Ergebnis als Ganzzahl zurück.computeAverageDurations(multipleTimings) : Berechnet durchschnittliche Dauern aus einer Reihe von Ereigniszeiten. Das Array soll Objekte mit den gleichen Schlüssel wie das timings -Objekt aus der nettime -Antwort enthalten. Das zurückgegebene Objekt enthält die gleichen Schlüssel, die auf Ereignisdauern im Prozess der Time -Format hinweisen.createTimingsFromDurations(timings, startTime) : Rekonstruiert Ereigniszeiten aus Ereignisdauern. Das timings -Objekt soll dieselben Schlüssel wie das timings -Objekt aus der nettime -Antwort enthalten, aber auf Ereignisdauern im Prozess des SHRTIME -Formats hinweisen. Das zurückgegebene Objekt enthält die gleichen Schlüssel, zeigt jedoch auf Ereigniszeiten im Prozess. Der startTime -Parameter kann die Ereigniszeiten schützen. Die Standardeinstellung ist keine Verschiebung - [0, 0] .isRedirect(statusCode) : Überprüft, ob der HTTP -Statuscode eine Weiterleitung bedeutet. Gibt true zurück, wenn es so ist, ansonsten false .Diese Methoden können auch separat benötigt werden:
const { isRedirect } = require ( 'nettime' )
const {
getDuration , getMilliseconds ,
computeAverageDurations , createTimingsFromDurations
} = require ( 'nettime/lib/timings' ) Methoden getDuration , getMilliseconds und isRedirect sind auch als statische Methoden der nettime -Funktion zugänglich, die aus dem nettime -Modul exportiert werden.
Achten Sie anstelle eines formellen StyleGeGe -Guide, um den vorhandenen Codierungsstil aufrechtzuerhalten. Fügen Sie Unit -Tests für neue oder geänderte Funktionen hinzu. FININT und testen Sie Ihren Code mit Grunzen.
Copyright (C) 2017-2022 Ferdinand Prantl
Lizenziert unter der MIT -Lizenz.