Imprime a duração do tempo de vários estágios de uma solicitação HTTP/s, como a pesquisa DNS, o handshake de TLS, o tempo para o primeiro byte etc. Da mesma forma que o comando de tempo, que mede os horários do processo, o comando nettime mede os tempos de solicitação HTTP/s. Você pode encontrar mais informações para entender e medir os horários do HTTP com o Node.js.
ATENÇÃO : As opções de linha de comando foram alteradas entre as versões 0.x e 1.x, para que elas se tornem compatíveis com o CURL. Se você usar a ferramenta de linha de comando nettime , verifique as opções afetadas:
-e, --ignore-certificate => -k, --insecure
-u, --unit => -t, --time-unit
-U, --user => -u, --user
A interface programática não mudou e permaneceu compatível.
Certifique -se de ter node.js> = 14.8 instalado. Instale o pacote nettime globalmente e imprima os horários de um site de amostra:
$ 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) Executando nettime sem parâmetros Imprime Instruções 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
Certifique -se de usar node.js> = 14.8. Instale o pacote nettime localmente e obtenha a duração do tempo aguardando a resposta e o download do conteúdo de uma página da Web de amostra:
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 ) ) O módulo principal exporta uma função que faz uma solicitação HTTP/s e retorna uma promessa ao objeto de resultado. A função carrega propriedades nettime , getDuration , getMilliseconds e isRedirect , para que a exportação possa ser consumida como um objeto com várias funções estáticas também:
const nettime = require ( 'nettime' )
const { nettime , getDuration } = require ( 'nettime' )O argumento de entrada é uma string com um URL para fazer a solicitação ou um objeto com várias propriedades.
O objeto de entrada pode conter:
url : string com um URL para fazer a solicitação.credentials : Objeto com username e as propriedades da string de password a serem usadas para a formatação do cabeçalho HTTP de autenticação básica.data : string ou buffer para enviar ao servidor usando a POST verbal http e o application/x-www-form-urlencoded por padrão.failOnOutputFileError : Boolean para impedir que a operação de tempo de solicitação falhe, se gravar no arquivo de saída falhado. Se definido como false , o erro será impresso na saída padrão e o código de saída do processo será definido como 2. Ele estará em vigor somente se outputFile for especificado. O padrão é true .headers : Objeto com nomes de cabeçalho como teclas de string e valores do cabeçalho como valores da string.httpVersion : string com a versão do protocolo ('1.0', '1.1' ou '2.0') a ser enviada ao servidor. (Node.js O suporte a HTTP é codificado para 1.1. Pode haver uma diferença entre 1,0 e 1,1 apenas no lado do servidor. Node.js suporta http/2 na versão 8.4.0 ou mais recente com a opção de comando-http2 e na versão 8.8.1.followRedirects : Boolean para continuar fazendo solicitações, se a resposta original continha um código de status HTTP redirecionadoincludeHeaders : Boolean para incluir headers de propriedade ( Object ) com cabeçalhos de resposta no objeto de resultado prometido. Se outputFile for especificado, os cabeçalhos também serão gravados no início do arquivo de saída.method : verbo http para usar na solicitação HTTP; GET é o padrão, a menos que as opções -i ou -d não estejam definidas.outputFile : Caminho do arquivo para gravar os dados recebidos.rejectUnauthorized : Boolean para recusar o final da solicitação HTTPS, está definido como true (o padrão), se a validação do certificado do site falhar; Definê -lo como false faz com que a solicitação ignore os erros de certificado.returnResponse : Boolean para incluir response da propriedade ( Buffer ) com os dados recebidos no objeto de resultado prometido.requestCount : Inteiro para fazer várias solicitações em vez de uma.requestDelay : Inteiro para introduzir um atraso (em milissegundos) entre cada duas solicitações. O padrão é 100.timeout : Intere a definir o tempo máximo (em milissegundos), uma única solicitação deve tomar antes de abortá -la.O objeto de resultado contém:
httpVersion : versão http, que o servidor respondeu com (string).statusCode : Código de status HTTP da resposta (número inteiro).statusMessage : Mensagem de status HTTP para o código de status (string).timings : Objeto com propriedades de tempo de vários estágios da solicitação. O tempo é uma matriz com dois números inteiros - segundos e nanossegundos aprovados desde que a solicitação foi feita, conforme devolvido pelo processo.hrtime.headers : um objeto opcional com os cabeçalhos de resposta, se ativado pela opção includeHeaders .url : uma string opcional com o URL solicitado, se a opção followRedirects foi definida como 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 ]
}
} Se a opção requestCount for maior que 1 , os objetos de resultado serão retornados em uma matriz do mesmo comprimento que o valor requestCount . Se a opção followRedirects os diretores definidos como true , os objetos de resultado serão retornados em uma matriz do comprimento, dependendo da presença e contagem de respostas de redirecionamento.
NOTA : O parâmetro de time-unit afeta não apenas o formato de saída "texto" do script da linha de comando, mas também o "JSON". Se definido como "MS", os valores de tempo serão impressos em milissegundos. Se definido como "s+ns", os horários serão impressos como matrizes em processo.hrtime's Format. Chamar a função nettime Programaticamente sempre retornará os horários como matrizes em processo.hrtime's Format.
As seguintes funções são expostas como exportações nomeadas do módulo nettime/lib/timings para ajudar a lidar com o formato de tempo do processo.
getDuration(start, end) : calcula a diferença entre duas vezes. Espera duas matrizes em processo. O formato de Hrtime e retorna o resultado como uma matriz no mesmo processo. Formato de Hrtime.getMilliseconds(timing) : converte o tempo em milissegundos. Espera uma matriz em processo. O formato de Hrtime e retorna o resultado como um número inteiro.computeAverageDurations(multipleTimings) : calcula durações médias de uma variedade de horários de evento. A matriz deve conter objetos com as mesmas teclas que o objeto timings da resposta nettime . O objeto retornado conterá as mesmas teclas apontando para durações de eventos em processo.hrtime's Format.createTimingsFromDurations(timings, startTime) : reconstrói os horários dos eventos das durações do evento. O objeto timings deve conter as mesmas teclas que o objeto timings da resposta nettime , mas apontando para durações de eventos em processo.hrtime's Format. O objeto retornado conterá as mesmas teclas, mas apontando para os tempos de eventos em processo.hrtime's Format. O parâmetro startTime pode encharcar os tempos do evento. O padrão não é mudança - [0, 0] .isRedirect(statusCode) : verifica se o código de status HTTP significa um redirecionamento. Retorna true se for, caso contrário, false .Esses métodos também podem ser necessários separadamente:
const { isRedirect } = require ( 'nettime' )
const {
getDuration , getMilliseconds ,
computeAverageDurations , createTimingsFromDurations
} = require ( 'nettime/lib/timings' ) Os métodos getDuration , getMilliseconds e isRedirect são acessíveis também como métodos estáticos da função nettime exportada do módulo principal nettime .
Em vez de um guia de estilo formal, tome cuidado para manter o estilo de codificação existente. Adicione testes de unidade para qualquer funcionalidade nova ou alterada. Fica e teste seu código usando Grunt.
Copyright (c) 2017-2022 Ferdinand Prantl
Licenciado sob a licença do MIT.