Compreender e medir os tempos de HTTP é como ter um superpoder no desenvolvimento web. É como ter uma habilidade especial que permite ver como os computadores se comunicam entre si, seja do seu dispositivo para um servidor ou entre servidores. Ele ajuda você a encontrar e corrigir problemas que tornam seus sites ou aplicativos lentos. Neste artigo, descobriremos como melhorar o tempo de resposta HTTP em Node.js para sites e aplicativos mais rápidos.
Descompactando o básico
Antes de nos aprofundarmos nos tempos de HTTP, vamos aprender alguns princípios básicos para estabelecer as bases para um entendimento adequado.
IP (protocolo de Internet):
A espinha dorsal da comunicação de rede, o IP lida com endereçamento e roteamento. Ele garante a entrega de pacotes de dados dos hosts de origem ao destino em uma ou mais redes IP.
DNS (servidores de nomes de domínio):
Este sistema de nomenclatura hierárquico traduz nomes de host legíveis por humanos, cruciais para aplicações webem endereços IP legíveis por máquina.
TCP (protocolo de controle de transmissão):
Uma regra que ajuda a configurar e manter conversas entre programas de computador em uma rede. Ele garante entrega de dados confiável, ordenada e com verificação de erros entre hosts em uma rede IP.
SSL/TLS (Segurança da Camada de Transporte):
Protocolos criptográficos que fornecem segurança de comunicação em uma rede. SSL, uma versão mais antiga, abriu caminho para o TLS. Ambos usam certificados para estabelecer conexões seguras, sendo o TLS a escolha mais moderna e segura.
Pesquisa de DNS:
Tempo gasto na resolução de nomes de domínio em endereços IP. Cada novo domínio aciona uma viagem completa para pesquisa de DNS. Nenhuma pesquisa é necessária se o destino já for um endereço IP.
Conexão TCP:
A duração para estabelecer uma conexão TCP entre hosts de origem e destino. Isso envolve um processo de handshake de várias etapas, gerenciado pelo sistema operacional. Se a conexão TCP não puder ser estabelecida, o tempo limite de todo o sistema operacional prevalecerá.
Aperto de mão TLS:
Tempo dedicado para completar um handshake TLS. Este processo envolve a troca de autenticação e chaves para estabelecer ou retomar sessões seguras. Observe que um handshake TLS não ocorre com solicitações não HTTPS.
Tempo até o primeiro byte (TTFB):
O tempo gasto aguardando a resposta inicial. Essa duração encapsula a latência de uma viagem de ida e volta ao servidor, juntamente com o tempo que o servidor leva para processar a solicitação e entregar a resposta.
Transferência de conteúdo:
O tempo alocado para receber os dados de resposta. A duração é influenciada pelo tamanho dos dados de resposta e pela largura de banda de rede disponível.
Como os tempos HTTP ajudam na identificação de gargalos?
Por exemplo, se a pesquisa de DNS demorar mais do que o previsto, o problema pode estar relacionado ao seu provedor de DNS ou às configurações de cache. E se o tempo até o primeiro byte for prolongado, você poderá examinar rapidamente a latência entre os endpoints e avaliar a carga atual do servidor.
Além disso, a transferência de conteúdo atrasada pode resultar de um corpo de resposta ineficiente, como a transmissão excessiva de dados (propriedades JSON não utilizadas) ou devido a uma conexão lenta.
Medindo tempos HTTP em Node.js: revelando o código
Para verificar os tempos de HTTP no Node.js, devemos ouvir solicitações, respostas e eventos de soquete específicos. Aqui está um trecho de código rápido que demonstra como fazer isso em Node.js; este exemplo concentra-se apenas nos tempos.

Código de exemplo para Pesquisa de DNS
// Verifica se ocorreu a pesquisa de DNS (não um endereço IP)
const dnsLookup = dnsLookupAt! == indefinido? getDuration(startAt, dnsLookupAt): indefinido;
Você pode usar o seguinte código para verificar o Conexão TCP
const tcpConnection = getDuration(dnsLookupAt || startAt, tcpConnectionAt);
O Aperto de mão TLS só funciona com protocolo https
// Verifica se ocorreu o handshake TLS (HTTPS)
const tlsHandshake = tlsHandshakeAt!== indefinido? getDuration(tcpConnectionAt, tlsHandshakeAt): indefinido;
Após o handshake TLS, esperamos que o servidor envie o Primeiro Byte
const firstByte = getDuration(tlsHandshakeAt || tcpConnectionAt, firstByteAt);
Após o primeiro byte Transferência de conteúdo começa
const contentTransfer = getDuration(firstByteAt, endAt);
Agora que aprendemos como medir os tempos HTTP com o Node, vamos dar uma olhada em algumas das ferramentas disponíveis. Essas ferramentas podem ser valiosas para compreender suas solicitações HTTP.
Módulo de solicitação
O módulo de solicitação amplamente utilizado vem equipado com um recurso conveniente para medir tempos HTTP. Para ativar este recurso, use a propriedade time.

Rastreamento Distribuído
Você pode usar a técnica de rastreamento distribuído e exibir visualmente os tempos de HTTP em uma linha do tempo. Esta abordagem oferece uma visão holística dos processos em segundo plano, revelando o custo real da construção de sistemas distribuídos.
Você pode usar a biblioteca open tracing-auto para rastreamento distribuído com êxito.
Conclusão
Explorar HTTP Timings em Node.js pode revelar gargalos de desempenho e, felizmente, o ecossistema Node oferece ferramentas excelentes para extrair essas métricas cruciais de seu aplicativo. Portanto, use as ferramentas ou técnicas de codificação para melhorar o tempo de resposta de seus aplicativos node.js.



