A compactação de Brotli é uma técnica de compressão genérica amplamente suportada entre os navegadores. É comparável aos métodos de compressão atualmente disponíveis, pois oferecem 20-26% melhores índices de compressão. No entanto, não é bom, a menos que o servidor da web esteja enviando recursos baseados em texto compactados com o algoritmo Brotli.
Neste artigo, aprenderemos como a compressão funciona no servidor e por que é útil? Também aprenderemos a instalar o servidor nginx e fazer com que nosso servidor forneça arquivos compactados Brotli.
Fundo
Técnicas/algoritmos de compressão melhoram o desempenho do site, reduzindo o tamanho do conteúdo. Portanto, os dados compactados levam uma carga baixa e tempo de transferência. No entanto, tem um preço. Os servidores utilizam muitos recursos computacionais para fornecer uma melhor taxa de compressão. Portanto, melhor, o caro. Portanto, é adicionado muito esforço para melhorar os formatos de compressão enquanto utiliza ciclos mínimos de CPU.
Até agora, o formato de compressão mais potencial foi gzipped. Recentemente, o GZIP é substituído por um novo algoritmo de compressão conhecido como brotli. É um algoritmo avançado de compressão composto por codificação Huffman, o algoritmo L77 e modelagem de contexto. Por outro lado, o GZIP é construído no algoritmo de deflate.
O formato de compressão sem perdas, projetado pelo Google, está intimamente relacionado ao esvaziar formato de compressão. Ambos os métodos de compactação usam janelas deslizantes para referência de volta. O tamanho da janela deslizante Brotli varia de 1 kb a 16 MB. Por outro lado, o GZIP tem um tamanho de janela fixa de 32kb. Isso significa que a janela de Brotli é 512 vezes maior que a janela esvaziada, o que não é relevante, pois os arquivos de texto maiores que 32 kb raramente estão nos servidores da web.
A compatibilidade de compressão do servidor é importante
Sempre que baixamos um arquivo do navegador, o navegador solicita ao servidor que tipo de compactação ele suporta através de um cabeçalho. Por exemplo, se o navegador suportar gzip e Esflada para descomprimir. Ele adicionará essas opções em seu Aceitar o codificação, cabeçalho, i.e.,
Aceitar-coding = ”Deflinar, Gzip”
Portanto, os navegadores que não suportam esses formatos não os incluirão no cabeçalho. Quando o servidor responde com o conteúdo, ele informa ao navegador sobre o formato de compressão através de um cabeçalho, Codificação de conteúdo. Portanto, se apoiar o GZIP, o cabeçalho se parece com o seguinte:
Content-coding = "gzip"
Cabeçalhos dos navegadores como o Firefox que suportam a compactação de Brotli e o servidor da web que possuem um módulo Brotli instalado para parecer estes:
Aceitar-coding = ”Deflinar, Gzip, Br”
Content-coding = "gzip, br"
Portanto, se o navegador utilizar o melhor formato de compressão e o servidor da web não, não é bom, pois o servidor da web não enviará os arquivos com o algoritmo de compactação preferido. É por isso que é importante instalar o módulo de compressão para o servidor da web.
Instalação do servidor
Antes de avançar com a configuração do Brotli, configuraremos nosso servidor nginx. Antes disso sudo Atualização APT-Get Sua distribuição e digite ubuntu nos seguintes comandos em seu terminal Bash.
ubuntu@ubuntu: ~ update APT-Get Apt-GetPara ativar a compressão de brotli no Nginx, compilaremos nosso .Então, módulos de acordo com os detalhes da versão nginx. Como mostrado, digitando o seguinte comando produzirá a versão nginx:
ubuntu@ubuntu: ~ $ nginx -vUse o wget comando junto com o seu detalhe da versão nginx para baixar o código -fonte do site nginx.
ubuntu@ubuntu: ~ $ wget https: // nginx.org/download/nginx-1.18.0.alcatrão.gzUsaremos este código -fonte para compilar *.Então, binários para compactação de brotli. Agora extraia o arquivo usando o seguinte comando.
ubuntu@ubuntu: ~ $ tar xzf nginx-1.18.0.alcatrão.gzConfiguração do módulo Brotli
Agora, o Google lançou o módulo Brotli para Nginx. Vamos clonear o módulo do repositório do Google.
ubuntu@ubuntu: ~ clone git https: // github.com/google/ngx_brotli -recursiva.Vamos cd no nginx-1.18.0 Pasta para configurar o módulo Brotli dinâmico.
ubuntu@ubuntu: ~ $ cd nginx-1.18.0/Nota: Você pode receber o seguinte erro ao configurar
./Configurar: Erro: o módulo reescrita http requer a biblioteca PCRE.Nesse caso, execute o seguinte comando para instalar a biblioteca PCRE
ubuntu@ubuntu: ~ $ sudo apt-get install libpcre3-dev -yCompilação do módulo
Vamos usar o fazer comando para criar um módulos pasta dentro do nginx-1.18.0 diretório.
ubuntu@ubuntu: ~ $ sudo faz módulosNós usamos o cp comando para copiar ngx_http_brotli*.então arquivos do nginx-1.18.0/Objs pasta para a pasta dos módulos.
ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/Agora liste o conteúdo dos arquivos usando o ls comando. Você notará que consiste em dois arquivos de módulo diferentes, eu.e.:
ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.entãoAgora use seu editor favorito para abrir o/etc/nginx/nginx.arquivo conf para adicionar módulos de carga Brotli para iniciar a configuração do Brotli, incluindo as seguintes linhas:
ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.confTambém incluiremos os caminhos das pastas de configuração /etc/nginx/conf.d/*.conf
e /usr/share/nginx/módulos/*.conf No arquivo acima, como:
httpPara adicionar a configuração Brotli, abra o/etc/nginx/conf.D/Brotli.conf
arquivo no vim editor e habilitar Brotli definindo as seguintes diretivas de configuração:
Brotli On;O "Brotli Off |”O valor permite ou desativa a dinâmica ou a compactação de mosca do conteúdo.
O 'brotli_ estático em ' Ativa o servidor nginx para verificar se os arquivos pré-comprovados com o .Extensões de BR existem ou não. Também podemos transformar essa configuração em uma opção desligado ou sempre. O sempre O valor permite que o servidor envie conteúdo pré-comprovado sem confirmar se o navegador suporta ou não. Como Brotli é intensivo em recursos, este módulo é mais adequado para reduzir as situações de gargalo.
O "brotli_comp_level 6”A diretiva define o nível de qualidade de compressão dinâmica para 6. Pode variar de 0 a 11.
Por fim, ative a compressão dinâmica para tipos específicos de mímica, enquanto as respostas de texto/html são sempre compactadas. A sintaxe padrão para esta diretiva é brotli_types [tipo MIME]. Você pode encontrar mais sobre a diretiva de configuração no GitHub.
Salve as alterações, reinicie o serviço nginx digitando “Serviço sudo reiniciar nginx” E tudo está feito.
Conclusão
Após as mudanças, você notará algumas melhorias óbvias nas métricas de desempenho. No entanto, ele vem com uma ligeira desvantagem do aumento da carga da CPU nos horários de pico. Para evitar essas situações, fique de olho no uso da CPU; Se atingir 100% regularmente, podemos utilizar muitas opções de acordo com nossas preferências, como apresentar conteúdo pré-compactado ou estático, diminuir o nível de compressão e desligar a compactação de voo, entre muitos.