Imprime la durée de différentes étapes d'une demande HTTP / S, comme la recherche DNS, la poignée de main TLS, le temps de premier octet, etc. De même à la commande temporelle, qui mesure les horaires du processus, la commande nettime mesure les horaires de la demande HTTP / s. Vous pouvez trouver plus d'informations dans la compréhension et la mesure des calendriers HTTP avec Node.js.
Attention : les options de ligne de commande ont changé entre les versions 0.x et 1.x, de sorte qu'elles deviennent compatibles avec Curl. Si vous utilisez l'outil de ligne de commande nettime , vérifiez les options affectées:
-e, --ignore-certificate => -k, --insecure
-u, --unit => -t, --time-unit
-U, --user => -u, --user
L'interface programmatique n'a pas changé et est restée compatible.
Assurez-vous que Node.js> = 14.8 installé. Installez le package nettime à l'échelle mondiale et imprimez les calendriers d'un exemple de site Web:
$ 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) Exécution nettime sans aucun paramètre imprime les instructions d'utilisation:
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
Assurez-vous d'utiliser Node.js> = 14.8. Installez le package nettime localement et obtenez la durée de l'attente de la réponse et téléchargeant le contenu d'un exemple de page Web:
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 ) ) Le module principal exporte une fonction qui fait une demande http / s et renvoie une promesse à l'objet résultat. La fonction comporte des propriétés nettime , getDuration , getMilliseconds et isRedirect , afin que l'exportation puisse être consommée en tant qu'objet avec plusieurs fonctions statiques: également:
const nettime = require ( 'nettime' )
const { nettime , getDuration } = require ( 'nettime' )L'argument d'entrée est une chaîne avec une URL pour faire la demande avec ou un objet avec plusieurs propriétés.
L'objet d'entrée peut contenir:
url : chaîne avec une URL pour faire la demande avec.credentials : Objet avec username et les propriétés de chaîne password à utiliser pour la mise en forme de l'en-tête HTTP d'authentification de base.data : chaîne ou tampon à envoyer au serveur à l'aide du POST HTTP Verbe et de l' application/x-www-form-urlencoded par défaut.failOnOutputFileError : Boolean pour empêcher l'opération de synchronisation de la demande d'échec, si l'écriture dans le fichier de sortie a échoué. Si elle est définie sur false , l'erreur sera imprimée sur la sortie standard et le code de sortie du processus sera défini sur 2. Il n'est en vigueur que si outputFile est spécifié. La valeur par défaut est true .headers : objet avec les noms d'en-tête en tant que touches de chaîne et valeurs d'en-tête comme valeurs de chaîne.httpVersion : chaîne avec la version protocole ('1.0', '1.1' ou '2.0') à envoyer au serveur. (La prise en charge de Node.js HTTP est codée en dur pour 1.1. Il peut y avoir une différence entre 1,0 et 1.1 du côté serveur uniquement. Node.js prend en charge HTTP / 2 dans la version 8.4.0 ou plus récente avec l'option - Expose-Http2 Command-lime et dans la version 8.8.1 ou plus récente de la boîte.followRedirects : Boolean pour continuer à faire des demandes, si la réponse d'origine contenait un code d'état HTTP redirigeantincludeHeaders : Boolean pour inclure headers de propriété ( Object ) avec des en-têtes de réponse dans l'objet de résultat promis. Si outputFile est spécifié, les en-têtes sont également écrits au début du fichier de sortie.method : Verbe HTTP à utiliser dans la demande HTTP; GET est la valeur par défaut, sauf si les options -i ou -d ne sont pas définies.outputFile : chemin de fichier pour écrire les données reçues.rejectUnauthorized : Boolean pour refuser la finition de la demande HTTPS, est défini sur true (la valeur par défaut), si la validation du certificat du site Web échoue; Le définir sur false fait que la demande ignore les erreurs de certificat.returnResponse : booléen pour inclure response de la propriété ( Buffer ) avec les données reçues dans l'objet de résultat promis.requestCount : entier pour faire plusieurs demandes au lieu d'un.requestDelay : Integer pour introduire un retard (en millisecondes) entre chaque deux demandes. La valeur par défaut est 100.timeout : Intere pour définir le temps maximum (en millisecondes), une seule demande devrait prendre avant de l'avorter.L'objet résultat contient:
httpVersion : version http, avec laquelle le serveur a répondu (String).statusCode : code d'état HTTP de la réponse (entier).statusMessage : message d'état HTTP pour le code d'état (chaîne).timings : Objet avec les propriétés de synchronisation à partir de différentes étapes de la demande. Le timing est un tableau avec deux entiers - secondes et nanosecondes passées depuis que la demande a été faite, comme retourné par process.hrtime.headers : un objet facultatif avec les en-têtes de réponse, s'il est activé par l'option includeHeaders .url : une chaîne facultative avec l'URL demandée, si l'option followRedirects a été définie sur true . {
"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 ]
}
} Si l'option requestCount est supérieure à 1 , les objets de résultat seront renvoyés dans un tableau de la même longueur que la valeur requestCount . Si l'option followRedirects nous est définie sur true , les objets de résultat seront retournés dans un tableau de la longueur en fonction de la présence et du nombre de réponses de redirection.
Remarque : Le paramètre time-unit affecte non seulement le format de sortie "texte" du script de ligne de commande, mais aussi le "JSON". Si réglé sur "MS", les valeurs de synchronisation seront imprimées en millisecondes. S'il est défini sur "S + NS", les horaires seront imprimés sous forme de tableaux dans le format de process.hrtime. L'appel de la fonction nettime par programme renvoie toujours les calendriers sous forme de tableaux dans le format de process.hrtime.
Les fonctions suivantes sont exposées comme des exportations nommées du module nettime/lib/timings pour aider à traiter le format de synchronisation et les horaires de chronométrage de Process.hrtime à partir de plusieurs demandes:
getDuration(start, end) : calcule la différence entre deux horaires. Attend deux tableaux dans le format de process.hrtime et renvoie le résultat en tant que tableau dans le même format de procédé.getMilliseconds(timing) : convertit le timing en millisecondes. Attend un tableau dans le format de processus.hrtime et renvoie le résultat en tant qu'entier.computeAverageDurations(multipleTimings) : calcule les durées moyennes à partir d'un tableau de calendrier d'événements. Le tableau est censé contenir des objets avec les mêmes touches que l'objet timings de la réponse nettime . L'objet retourné contiendra les mêmes clés pointant vers des durées d'événements dans le format de process.hrtime.createTimingsFromDurations(timings, startTime) : reconstruit les horaires des événements des durées d'événements. L'objet timings est censé contenir les mêmes clés que l'objet timings de la réponse nettime , mais pointant des durées d'événements dans le format de Process.hrtime. L'objet retourné contiendra les mêmes clés, mais pointant des heures d'événement dans le format de processus. Le paramètre startTime peut basculer les temps d'événement. La valeur par défaut n'est pas un changement - [0, 0] .isRedirect(statusCode) : vérifie si le code d'état HTTP signifie une redirection. Renvoie true si c'est le cas, sinon false .Ces méthodes peuvent également être nécessaires séparément:
const { isRedirect } = require ( 'nettime' )
const {
getDuration , getMilliseconds ,
computeAverageDurations , createTimingsFromDurations
} = require ( 'nettime/lib/timings' ) Méthodes getDuration , getMilliseconds et isRedirect sont également accessibles en tant que méthodes statiques de la fonction nettime exportées à partir du module nettime principal.
Au lieu d'un style de style formel, veillez à maintenir le style de codage existant. Ajoutez des tests unitaires pour toute fonctionnalité nouvelle ou modifiée. Lint et testez votre code en utilisant un grognement.
Copyright (C) 2017-2022 Ferdinand Prantl
Licencié sous la licence du MIT.