Por que usar o deflate em vez do gzip para arquivos de texto servidos pelo Apache?

Quais as vantagens que ambos os methods oferecem para arquivos html, css e javascript servidos por um servidor LAMP. Existem alternativas melhores?

O servidor fornece informações para um aplicativo de mapa usando Json, portanto, um grande volume de arquivos pequenos.

Veja também Existe algum impacto no desempenho envolvido na escolha do gzip sobre o deflate para a compactação http?

    Por que usar o deflate em vez do gzip para arquivos de texto servidos pelo Apache?

    A resposta simples é não .


    RFC 2616 define deflação como:

    deflate O formato “zlib” definido no RFC 1950 em combinação com o mecanismo de compactação “deflate” descrito no RFC 1951

    O formato zlib é definido no RFC 1950 como:

    0 1 +---+---+ |CMF|FLG| (more-->) +---+---+ 0 1 2 3 +---+---+---+---+ | DICTID | (more-->) +---+---+---+---+ +=====================+---+---+---+---+ |...compressed data...| ADLER32 | +=====================+---+---+---+---+ 

    Então, alguns headers e uma sum de verificação ADLER32

    RFC 2616 define gzip como:

    gzip Um formato de codificação produzido pelo programa de compactação de arquivos “gzip” (GNU zip), conforme descrito no RFC 1952 [25]. Este formato é uma codificação Lempel-Ziv (LZ77) com um CRC de 32 bits.

    A RFC 1952 define os dados compactados como:

    O formato atualmente usa o método DEFLATE de compactação, mas pode ser facilmente estendido para usar outros methods de compactação.

    CRC-32 é mais lento que ADLER32

    Comparado a uma verificação de redundância cíclica do mesmo comprimento, troca confiabilidade por velocidade (preferindo a última).

    Então … nós temos 2 mecanismos de compression que usam o mesmo algoritmo para compression, mas um algoritmo diferente para headers e checksum.

    Agora, os pacotes TCP subjacentes já são bastante confiáveis , então o problema aqui não é Adler 32 vs CRC-32 que o GZIP usa.


    Acontece que muitos navegadores ao longo dos anos implementaram um algoritmo de deflação incorreto. Em vez de esperar o header zlib no RFC 1950, eles simplesmente esperavam a carga compactada. Da mesma forma, vários servidores da Web cometeram o mesmo erro.

    Assim, com o passar dos anos, os navegadores começaram a implementar uma implementação de deflação de lógica difusa , eles tentaram pelo header zlib e pela sum de verificação do adler, se isso falhar, eles tentarão obter carga útil.

    O resultado de ter uma lógica complexa como essa é que ela é freqüentemente quebrada. O Verve Studio tem uma seção de teste contribuída pelo usuário que mostra o quão ruim é a situação.

    Por exemplo: deflate funciona no Safari 4.0, mas está quebrado no Safari 5.1, mas também tem problemas no IE.


    Então, a melhor coisa a fazer é evitar esvaziar completamente, o menor aumento de velocidade (devido a adler 32) não vale o risco de cargas quebradas.

    O GZip é simplesmente esvaziado mais uma sum de verificação e header / rodapé. O esvaziamento é mais rápido , porém, como aprendi da maneira mais difícil.

    gzip vs deflate graph

    Você provavelmente não é capaz de realmente esvaziar como uma opção. Ao contrário do que você pode esperar, o mod_deflate não está usando deflate mas gzip. Assim, embora a maioria dos pontos sejam válidos, provavelmente não é relevante para a maioria.

    A principal razão é que o deflate é mais rápido para codificar do que o gzip e em um servidor ocupado que pode fazer a diferença. Com páginas estáticas, é uma questão diferente, já que elas podem ser pré-compactadas facilmente uma vez.

    Eu acho que não há grande diferença entre deflate e gzip, porque o gzip é basicamente apenas um header envolvendo o deflate (veja RFCs 1951 e 1952).

    mod_deflate requer menos resources em seu servidor, embora você possa pagar uma pequena penalidade em termos da quantidade de compactação.

    Se você está servindo muitos arquivos pequenos, eu recomendaria o benchmarking e teste de carga de suas soluções compactadas e não compactadas – você pode encontrar alguns casos em que a ativação da compactação não resultará em economia.

    Não deve haver qualquer diferença no gzip e deflate para descompression. Gzip é apenas esvaziar com algumas dezenas de header de bytes em volta, incluindo uma sum de verificação. A sum de verificação é o motivo da compactação mais lenta. No entanto, quando você estiver pré-compactando zilhões de arquivos, você desejará essas verificações como uma verificação de integridade em seu sistema de arquivos. Além disso, você pode utilizar ferramentas de linha de comando para obter statistics sobre o arquivo. Para o nosso site, estamos a pré-compactar uma tonelada de dados estáticos (todo o diretório aberto, 13.000 jogos, autocomplete para milhões de palavras-chave, etc.) e estamos classificados 95% mais rápido do que todos os sites por Alexa. Pesquisa Faxo . No entanto, utilizamos um servidor Web proprietário desenvolvido internamente. Apache / mod_deflate simplesmente não cortou. Quando esses arquivos são compactados no sistema de arquivos, você não apenas obtém um hit para o seu arquivo com o tamanho mínimo de bloco do sistema de arquivos, mas toda a sobrecarga desnecessária no gerenciamento do arquivo no sistema de arquivos que o servidor da Web poderia se importar menos. Suas preocupações devem ser o total de espaço em disco e o tempo de access / descompression e, em segundo lugar, a velocidade de poder obter esses dados pré-compactados. A pegada é importante porque, mesmo que o espaço em disco seja barato, você quer, tanto quanto possível, caber no cache.

    No Ubuntu com o Apache2 e o módulo deflate já instalado (que é por padrão), você pode ativar a deflação da compactação gzip em duas etapas fáceis:

     a2enmod deflate /etc/init.d/apache2 force-reload 

    E você está longe! Eu encontrei as páginas que eu usei em minha conexão adsl carregadas muito mais rápido.

    Edit: Como por comentário @ GertvandenBerg, isso permite a compression gzip, não esvaziar.

    se eu me lembro bem

    • o gzip irá comprimir um pouco mais do que esvaziar
    • Desinflar é mais eficiente