La compresión de Brotli es una técnica de compresión de propósito genérico ampliamente compatible con los navegadores. Es comparable a los métodos de compresión disponibles actualmente, ya que ofrece relaciones de compresión 20-26% mejores. Sin embargo, no es bueno a menos que el servidor web envíe recursos basados en texto comprimidos con el algoritmo Brotli.
En este artículo, aprenderemos cómo funciona la compresión en el servidor y por qué es útil? También aprenderemos a instalar el servidor NGINX y lograr que nuestro servidor proporcione archivos comprimidos Brotli.
Fondo
Las técnicas/algoritmos de compresión mejoran el rendimiento del sitio web al reducir el tamaño del contenido. Por lo tanto, los datos comprimidos toman un tiempo de carga y transferencia baja. Sin embargo, tiene un precio. Los servidores utilizan muchos recursos computacionales para proporcionar una mejor tasa de compresión. Por lo tanto, mejor, mejor. Por lo tanto, se agrega una gran cantidad de esfuerzo para mejorar los formatos de compresión al tiempo que utiliza ciclos mínimos de CPU.
Por ahora, el formato de compresión más potencial fue GZipped. Recientemente, GZIP se reemplaza por un nuevo algoritmo de compresión conocido como Brotli. Es un algoritmo de compresión avanzado compuesto por la codificación de Huffman, el algoritmo L77 y el modelado de contexto. Por el contrario, GZIP se basa en el algoritmo de deflación.
El formato de compresión sin pérdidas, diseñado por Google, está estrechamente relacionado con el formato de compresión desinflado. Ambos métodos de compresión utilizan ventanas deslizantes para referencias hacia atrás. El tamaño de la ventana deslizante de Brotli varía de 1 kb a 16 MB. En contraste, GZIP tiene un tamaño de ventana fijo de 32 kb. Eso significa que la ventana de Brotli es 512 veces más grande que la ventana Desinflar, que no es relevante ya que los archivos de texto mayores de 32 kb rara vez se encuentran en servidores web.
La compatibilidad de compresión del servidor es importante
Cada vez que descargamos un archivo del navegador, el navegador solicita el servidor qué tipo de compresión es compatible a través de un encabezado. Por ejemplo, si el navegador admite gzip y desinflar descomprimir. Agregará estas opciones en su Aceptación, encabezado, yo.mi.,
Aceptar- ending = ”Deflate, gzip"
Por lo tanto, los navegadores que no admiten estos formatos no los incluirán en el encabezado. Cuando el servidor responde con el contenido, le dice al navegador sobre el formato de compresión a través de un encabezado, Codificación de contenido. Por lo tanto, si es compatible con GZIP, entonces el encabezado se ve así:
Content-ending = "gzip"
Encabezados de los navegadores como Firefox que admiten la compresión Brotli y el servidor web que tiene un módulo Brotli instalado para verse como estos:
Aceptar- ending = ”Deflate, Gzip, BR"
Content-ending = "gzip, br"
Por lo tanto, si el navegador utiliza el mejor formato de compresión y el servidor web no lo hace, no es bueno, ya que el servidor web no enviará los archivos con el algoritmo de compresión preferido. Por eso es importante instalar el módulo de compresión para el servidor web.
Instalación del servidor
Antes de seguir adelante con la configuración de Brotli, configuraremos nuestro servidor NGINX. Antes de que sudo Actualización de apt-get Su distribución de Ubuntu y escriba los siguientes comandos en su terminal Bash.
ubuntu@ubuntu: ~ $ sudo apt-get actualizaciónPara habilitar la compresión brotli en el nginx, compilaremos nuestro .Entonces, módulos según los detalles de nuestra versión nginx. Como se muestra, escribir el siguiente comando emitirá la versión Nginx:
ubuntu@ubuntu: ~ $ nginx -vUtilizar el wget Comando junto con el detalle de su versión Nginx para descargar el código fuente del sitio web de Nginx.
ubuntu@ubuntu: ~ $ wget https: // nginx.org/descargar/nginx-1.18.0.alquitrán.GZUsaremos este código fuente para compilar *.Entonces binarios para la compresión brotli. Ahora extraiga el archivo usando el siguiente comando.
ubuntu@ubuntu: ~ $ tar xzf nginx-1.18.0.alquitrán.GZConfiguración del módulo Brotli
Ahora Google ha lanzado el módulo Brotli para Nginx. Git-clonaremos el módulo del repositorio de Google.
ubuntu@ubuntu: ~ $ git clon https: // github.com/Google/NGX_BROTLI -RECURSIVO.Lo haremos cd en el nginx-1.18.0 carpeta para configurar el módulo Brotli dinámico.
ubuntu@ubuntu: ~ $ cd nginx-1.18.0/Nota: puede recibir el siguiente error al configurar
./Configurar: Error: el módulo de reescritura HTTP requiere la biblioteca PCRE.En ese caso, ejecute el siguiente comando para instalar la biblioteca pcre
ubuntu@ubuntu: ~ $ sudo apt-get install libpcre3-dev -yCompilación de módulos
Usaremos el hacer comandar para crear un módulos carpeta dentro del Nginx-1.18.0 Directorio.
ubuntu@ubuntu: ~ $ sudo hacer módulosUsamos el CP comando copiar ngx_http_brotli*.entonces archivos del nginx-1.18.0/objs carpeta a la carpeta de módulos.
ubuntu@ubuntu: ~ $ cd /nginx-1.18.0/objs/Ahora enumere el contenido de los archivos utilizando el LS dominio. Notarás que consta de dos archivos de módulos diferentes, yo.mi.:
ubuntu@ubuntu: ~ $ ls ngx_http_brotli*.entoncesAhora use su editor favorito para abrir el/etc/nginx/nginx.Archivo de conf para agregar módulos de carga brotli para comenzar la configuración de Brotli incluyendo las siguientes líneas:
ubuntu@ubuntu: ~ $ sudo vim/etc/nginx/nginx.confusiónTambién incluiremos rutas de carpetas de configuración /etc/nginx/conf.d/*.confusión
y /usr/share/nginx/módulos/*.confusión En el archivo anterior, como:
httpPara agregar la configuración brotli, abra el/etc/nginx/conf.d/brotli.confusión
archivo en el empuje Editor y habilite Brotli configurando las siguientes directivas de configuración:
brotli on;El "brotli apagado |"El valor habilita o deshabilita la dinámica o en la compresión de la mosca del contenido.
El 'brotli_ static on ' habilita el servidor NGINX para verificar si los archivos precompresados con el .Br extensiones existen o no. También podemos convertir esta configuración en una opción apagado o siempre. El siempre El valor permite que el servidor envíe contenido precomprimido sin confirmar si el navegador lo admite o no. Dado que Brotli es intensivo en recursos, este módulo es el más adecuado para reducir las situaciones de cuello de botella.
El "brotli_comp_level 6"Directiva establece el nivel de calidad de compresión dinámica en 6. Puede variar de 0 a 11.
Por último, habilite la compresión dinámica para tipos de MIME específicos, mientras que las respuestas de texto/HTML siempre se comprimen. La sintaxis predeterminada para esta directiva es brotli_types [tipo mime]. Puede encontrar más sobre la directiva de configuración en GitHub.
Guarde los cambios, reinicie el servicio NGINX escribiendo "SUDO Service reiniciar nginx" Y todo está hecho.
Conclusión
Después de los cambios, notará algunas mejoras obvias en las métricas de rendimiento. Sin embargo, viene con un ligero inconveniente del aumento de la carga de la CPU en las horas pico. Para evitar tales situaciones, vigile el uso de la CPU; Si alcanza el 100% regularmente, podemos utilizar muchas opciones según nuestras preferencias, como presentar contenido precompresado o estático, bajar el nivel de compresión y apagar la compresión sobre la marcha, entre muchos.