pagina - ¿Por qué usar deflate en lugar de gzip para archivos de texto servidos por Apache?
gzip web (9)
¿Por qué usar deflate en lugar de gzip para archivos de texto servidos por Apache?
La respuesta simple es no .
RFC 2616 define deflate como:
desinflar El formato "zlib" definido en RFC 1950 en combinación con el mecanismo de compresión "desinflar" descrito en RFC 1951
El formato zlib se define en RFC 1950 como:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Por lo tanto, unos pocos encabezados y una suma de comprobación ADLER32
RFC 2616 define gzip como:
gzip Un formato de codificación producido por el programa de compresión de archivos "gzip" (GNU zip) como se describe en RFC 1952 [25]. Este formato es una codificación Lempel-Ziv (LZ77) con un CRC de 32 bits.
RFC 1952 define los datos comprimidos como:
El formato actualmente utiliza el método DEFLATE de compresión, pero puede extenderse fácilmente para usar otros métodos de compresión.
CRC-32 es más lento que ADLER32
En comparación con una verificación de redundancia cíclica de la misma longitud, cambia la confiabilidad por la velocidad (prefiriendo la última).
Entonces ... tenemos 2 mecanismos de compresión que usan el mismo algoritmo para la compresión, pero un algoritmo diferente para los encabezados y la suma de comprobación.
Ahora, los paquetes TCP subyacentes ya son bastante confiables , por lo que el problema aquí no es Adler 32 vs CRC-32 que usa GZIP.
Resulta que muchos navegadores a lo largo de los años implementaron un algoritmo de desinflado incorrecto. En lugar de esperar el encabezado zlib en RFC 1950, simplemente esperaban la carga útil comprimida. Del mismo modo, varios servidores web cometieron el mismo error.
Por lo tanto, a lo largo de los años, los navegadores comenzaron a implementar una implementación de desinflado de lógica difusa , intentaron la suma de comprobación del encabezado zlib y adler, si eso falla intentan la carga útil.
El resultado de tener una lógica compleja como esa es que a menudo se rompe. Verve Studio tiene una sección de prueba contribuida por el usuario que muestra qué tan grave es la situación.
Por ejemplo: deflate funciona en Safari 4.0 pero no funciona en Safari 5.1, también tiene problemas en IE.
Entonces, lo mejor que puede hacer es evitar el desinflado por completo, el aumento de velocidad menor (debido a Adler 32) no vale la pena el riesgo de que se rompan las cargas útiles.
¿Qué ventajas ofrece cualquiera de los dos métodos para archivos html, css y javascript servidos por un servidor LAMP? ¿Hay mejores alternativas?
El servidor proporciona información a una aplicación de mapas utilizando Json, por lo que un gran volumen de archivos pequeños.
Consulte también ¿Hay algún impacto en el rendimiento involucrado en la elección de gzip en lugar de desinflar para la compresión http?
Creo que no hay una gran diferencia entre deflate y gzip, porque gzip básicamente es solo un encabezado envuelto alrededor de deflate (ver RFC 1951 y 1952).
En Ubuntu con Apache2 y el módulo de desinflado ya instalado (que es de forma predeterminada), puede habilitar la compresión de gzip de desinflado en dos sencillos pasos:
a2enmod deflate
/etc/init.d/apache2 force-reload
¡Y tú estás lejos! Encontré las páginas que serví sobre mi conexión de adsl cargadas mucho más rápido.
Edición: De acuerdo con el comentario de @GertvandenBerg, esto habilita la compresión gzip, no la deflación.
Es probable que no puedas realmente elegir desinflar como una opción. Al contrario de lo que puede esperar, mod_deflate no utiliza deflate sino gzip. Entonces, si bien la mayoría de los puntos son válidos, es probable que no sea relevante para la mayoría.
GZip es simplemente desinflado más una suma de comprobación y encabezado / pie de página. Sin embargo, desinflar es más rápido , ya que aprendí de la manera más difícil.
La razón principal es que la deflación es más rápida de codificar que gzip y en un servidor ocupado que podría marcar la diferencia. Con las páginas estáticas es una pregunta diferente, ya que pueden comprimirse fácilmente una vez.
No debería haber ninguna diferencia en gzip y desinflado para descompresión. Gzip simplemente se desinfla con unas pocas docenas de encabezados de byte envueltos, incluyendo una suma de comprobación. La suma de comprobación es el motivo de la compresión más lenta. Sin embargo, cuando está comprimiendo miles de millones de archivos, desea esas sumas de comprobación como un control de seguridad en su sistema de archivos. Además, puede utilizar las herramientas de la línea de comandos para obtener estadísticas sobre el archivo. Para nuestro sitio, estamos precomprimiendo una tonelada de datos estáticos (el directorio abierto completo, 13,000 juegos, autocompletar para millones de palabras clave, etc.) y estamos clasificados en un 95% más rápido que todos los sitios web de Alexa. Faxo búsqueda . Sin embargo, sí utilizamos un servidor web propietario propio. Apache / mod_deflate simplemente no lo cortó. Cuando esos archivos se comprimen en el sistema de archivos, no solo recibe un acierto para su archivo con el tamaño mínimo de bloque del sistema de archivos, sino toda la sobrecarga innecesaria en la gestión del archivo en el sistema de archivos que el servidor web no debería preocuparse. Sus preocupaciones deben ser la huella total del disco y el tiempo de acceso / descompresión y, en segundo lugar, la velocidad para poder obtener estos datos precomprimidos. La huella es importante porque a pesar de que el espacio en disco es barato, se desea que quepa en la memoria caché.
mod_deflate requiere menos recursos en su servidor, aunque puede pagar una pequeña multa en términos de la cantidad de compresión.
Si está sirviendo muchos archivos pequeños, le recomiendo que haga una evaluación comparativa y una prueba de carga de sus soluciones comprimidas y no comprimidas: puede encontrar algunos casos en los que la compresión no resulte en ahorros.
si recuerdo correctamente
- gzip comprimirá un poco más que desinflar
- desinflar es más eficiente