Imprime la duración del tiempo de varias etapas de una solicitud HTTP/S, como la búsqueda DNS, el apretón de manos TLS, el tiempo hasta el primer byte, etc. De manera similar al comando de tiempo, que mide los tiempos de proceso, el comando nettime mide los tiempos de solicitud de HTTP/S. Puede encontrar más información sobre la comprensión y la medición de los horarios de HTTP con Node.js.
Atención : las opciones de línea de comandos cambiaron entre las versiones 0.x y 1.x, para que se vuelvan compatibles con el curl. Si usa la herramienta de línea de comandos nettime , verifique las opciones afectadas:
-e, --ignore-certificate => -k, --insecure
-u, --unit => -t, --time-unit
-U, --user => -u, --user
La interfaz programática no cambió y se ha mantenido compatible.
Asegúrese de tener Node.js> = 14.8 instalado. Instale el paquete nettime a nivel mundial e imprima los horarios de un sitio web de muestra:
$ 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) Ejecutar nettime sin ningún parámetro Impresa instrucciones de uso:
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
Asegúrese de usar node.js> = 14.8. Instale el paquete nettime localmente y obtenga la duración del tiempo de esperar la respuesta y descargar el contenido de una página web de muestra:
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 ) ) El módulo principal exporta una función que realiza una solicitud HTTP/S y devuelve una promesa al objeto de resultado. La función lleva propiedades, nettime , getMilliseconds e isRedirect , de modo que la exportación getDuration se puede consumir como un objeto con varias funciones estáticas:
const nettime = require ( 'nettime' )
const { nettime , getDuration } = require ( 'nettime' )El argumento de entrada es una cadena con una URL para realizar la solicitud con un objeto con múltiples propiedades.
El objeto de entrada puede contener:
url : Cadena con una URL para hacer la solicitud.credentials : Objeto con propiedades de cadena de username y password que se utilizarán para el formateo del encabezado HTTP de autenticación básica.data : cadena o búfer para enviar al servidor utilizando la POST verbal HTTP y el tipo de contenido application/x-www-form-urlencoded de forma predeterminada.failOnOutputFileError : boolean para evitar que la operación de tiempo de solicitud falle, si la escritura en el archivo de salida falló. Si se establece en false , el error se imprimirá en la salida estándar y el código de salida del proceso se establecerá en 2. Solo está en efecto solo si se especifica outputFile . El valor predeterminado es true .headers : objeto con nombres de encabezado como teclas de cadena y valores de encabezado como valores de cadena.httpVersion : String con la versión del protocolo ('1.0', '1.1' o '2.0') que se enviará al servidor. (Node.js HTTP Support está codificado para 1.1. Puede haber una diferencia entre 1.0 y 1.1 solo en el lado del servidor. Node.js admite HTTP/2 en la versión 8.4.0 o más reciente con la opción de comandos --expos-Http2 y en la versión 8.8.1 o más nuevo fuera de la caja.followRedirects : Boolean para continuar haciendo solicitudes, si la respuesta original contenía un código de estado HTTP de redirecciónincludeHeaders : boolean para incluir headers de propiedades ( Object ) con encabezados de respuesta en el objeto de resultado prometido. Si se especifica outputFile , los encabezados también se escriben al comienzo del archivo de salida.method : verbo http para usar en la solicitud http; GET es el valor predeterminado, a menos que las opciones -i o -d no estén establecidas.outputFile : ruta del archivo para escribir los datos recibidos.rejectUnauthorized : Boolean para rechazar la finalización de la solicitud HTTPS, se establece en true (el valor predeterminado), si la validación del certificado del sitio web falla; Configurarlo en false hace que la solicitud ignore los errores de certificado.returnResponse : boolean para incluir response de la propiedad ( Buffer ) con los datos recibidos en el objeto de resultado prometido.requestCount : Integer para hacer múltiples solicitudes en lugar de una.requestDelay : Integer para introducir un retraso (en milisegundos) entre cada dos solicitudes. El valor predeterminado es 100.timeout : intero para establecer el tiempo máximo (en milisegundos) que debe tomar una sola solicitud antes de abortarla.El objeto de resultado contiene:
httpVersion : versión http, que el servidor respondió con (cadena).statusCode : HTTP Código de estado de la respuesta (entero).statusMessage : Mensaje de estado HTTP para el código de estado (String).timings : Objeto con propiedades de tiempo de varias etapas de la solicitud. El tiempo es una matriz con dos enteros: segundos y nanosegundos aprobados desde que se ha realizado la solicitud, según lo devuelto por Process.hrtime.headers : un objeto opcional con los encabezados de respuesta, si la opción lo habilita, includeHeaders .url : una cadena opcional con la URL solicitada, si la opción followRedirects se estableció en 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 la opción requestCount es mayor que 1 , los objetos de resultado se devolverán en una matriz de la misma longitud que el valor requestCount . Si la opción nos followRedirects a true , los objetos de resultado se devolverán en una matriz de la longitud dependiendo de la presencia y el recuento de respuestas de redireccionamiento.
Nota : El parámetro time-unit afecta no solo el formato de salida "Texto" del script de línea de comandos, sino también el "JSON". Si se establece en "MS", los valores de tiempo se imprimirán en milisegundos. Si se establece en "S+NS", los tiempos se imprimirán como matrices en el formato de proceso. Llamar a la función nettime programáticamente siempre devolverá los tiempos como matrices en proceso.
Las siguientes funciones se exponen como las exportaciones nombradas del módulo nettime/lib/timings para ayudar a tratar con Process.hrtime, el formato de tiempo y los horarios de múltiples solicitudes:
getDuration(start, end) : calcula la diferencia entre dos tiempos. Espera dos matrices en el formato de proceso.getMilliseconds(timing) : convierte el momento en milisegundos. Espera una matriz en el formato de proceso.computeAverageDurations(multipleTimings) : calcula las duraciones promedio de una matriz de tiempos de eventos. Se supone que la matriz contiene objetos con las mismas claves que el objeto timings de la respuesta nettime . El objeto devuelto contendrá las mismas claves que apuntan a las duraciones del evento en el formato de proceso.createTimingsFromDurations(timings, startTime) : Reconstruye los tiempos de eventos de las duraciones de eventos. Se supone que el objeto timings contiene las mismas claves que el objeto de timings de la respuesta nettime , pero apunta a las duraciones del evento en el proceso. El objeto devuelto contendrá las mismas claves, pero apunta a los tiempos de evento en el formato de proceso. El parámetro de startTime puede marcar los tiempos del evento. El valor predeterminado es sin cambio - [0, 0] .isRedirect(statusCode) : verifica si el código de estado HTTP significa una redirección. Devuelve true si es así, de lo contrario false .Estos métodos también pueden ser requeridos por separado:
const { isRedirect } = require ( 'nettime' )
const {
getDuration , getMilliseconds ,
computeAverageDurations , createTimingsFromDurations
} = require ( 'nettime/lib/timings' ) Los métodos getDuration , getMilliseconds e isRedirect son accesibles también como métodos estáticos de la función nettime exportadas desde el módulo nettime principal.
En lugar de una guía de estilo formal, tenga cuidado de mantener el estilo de codificación existente. Agregue pruebas unitarias para cualquier funcionalidad nueva o modificada. Pelusa y prueba tu código usando gruñido.
Copyright (c) 2017-2022 Ferdinand Prantl
Licenciado bajo la licencia del MIT.