Análise de pacotes de resposta Apache Gzipped
-
11-07-2019 - |
Pergunta
Depois de ativar a compactação GZIP no meu servidor Apache (mod_deflate), encontrei consistentemente que o usuário final estava sendo servido em média 200 ms mais lento do que as respostas não compactadas.
Isso foi inesperado, então modifiquei a diretiva de compactação para comprimir apenas respostas de texto/html, acionei o Wireshark e olhei para o despejo de rede antes e depois da compactação.
Aqui estão minhas observações de um PEGUE com tráfego mínimo na rede
Antes da compressão
Transactions on the wire: 46 Total time for 46 trans: 791ms i. TCP seq/ack: 14ms ii. 1st data segment: 693ms iii. Remaining: 83ms (27/28 data units transferred + tcp/ip handshakes)
Após a compressão
Transactions on the wire: 10 Total time for 46 trans: 926ms i. TCP seq/ack: 14ms ii. 1st data segment: 746ms iii. Remaining: 165ms (5 out of 6 data units transfered)
Depois que a compressão foi definida, é claro e compreensível que o número de transações no fio seja significativamente menor do que o não compactado.
No entanto, a unidade de dados compactada levou muito mais tempo para transferir de origem para destino.
Parece que o trabalho adicional de compressão está compreensivelmente levando tempo, mas não consegue entender por que cada dados enviados foi significativamente mais lento quando comprimido.
Meu entendimento do processo de compressão é:
1. GET Request is received by Apache 2. Apache identifies resource 3. Compress the resource 4. Respond with compressed response
Com esse esquema, eu presumiria que a terceira etapa é (a etapa antes do primeiro segmento da resposta levaria mais tempo, já que somos - compactação + resposta - Mas o restante dos pedaços que eu presumi levar em média a igual tempo como os pedaços não compactados, mas não são.
Alguém pode me dizer o porquê ... ou sugerir uma maneira melhor de analisar esse cenário. Alguém também tem uma comparação antes e depois ... eu apreciaria qualquer feedback/comentários/perguntas
Solução
Eu estava usando um teste insuficiente para comparar os dois cenários (acho que menos de 100 recursos). Com testes suficientes - mais de 6000 URLs, mostrou que o tempo de resposta compactado ao primeiro byte foi mais rápido por 200 milissegundos no serviço de texto/html, onde o TTLB foi mais rápido por 25 milissegundos em média.
Não carreguei isso testei isso, o que pretendo fazer e atualizar esta resposta.