with prueba online compress check compression gzip

compression - prueba - ¿Tiene el nivel de compresión GZIP algún impacto en la descompresión?



gzip verification (3)

Entiendo que GZIP es una combinación de codificación LZ77 y Huffman y se puede configurar con un nivel entre 1-9 donde 1 indica la compresión más rápida (menos compresión) y 9 indica el método de compresión más lento (la mejor compresión).

Mi pregunta es, ¿la elección del nivel solo afecta el proceso de compresión o hay un costo adicional también incurrido en la descompresión dependiendo del nivel usado para comprimir?

Lo pregunto porque, en general, muchos servidores web recibirán respuestas GZIP sobre la marcha si el cliente lo admite, por ejemplo, Accept-Encoding: gzip . Aprecio que al hacer esto sobre la marcha, un nivel como 6 podría ser la mejor opción para el caso promedio, ya que proporciona un buen equilibrio entre velocidad y compresión.

Sin embargo, si tengo un montón de activos estáticos que puedo GZIP solo una vez antes, y nunca necesito hacer esto otra vez, ¿habría algún inconveniente en usar el nivel de compresión más alto pero más lento? Es decir, ahora hay una sobrecarga adicional para el cliente en la que no se habría incurrido si se hubiera utilizado un nivel de compresión más bajo.


En realidad, en las mediciones del mundo real, un nivel de compresión más alto produce tiempos de descompresión más bajos (lo que puede deberse principalmente al hecho de que usted necesita manejar menos almacenamiento permanente y menos acceso a la RAM).

Dado que, en realidad, la mayoría de las cosas que suceden en un cliente con los datos son bastante costosas en comparación con el disparo de armas, realmente no debería preocuparse por eso.

También tenga en cuenta que para los activos estáticos que son imágenes, por lo general, la codificación huffman / zlib (¡PNG simplemente usa zlib!) Ya está aplicada, y no obtendrá mucho al gzipping estos. En realidad, a menudo las imágenes pequeñas (por ejemplo, los iconos) caben en un solo paquete TCP (ignorando el encabezado HTTP, que a veces es más grande que la imagen en sí) y, por lo tanto, no obtiene ninguna ganancia de velocidad (pero ahorra dinero en el volumen de transferencia. - si entregas terabytes de imágenes pequeñas. Ahora, puedo suponer que no eres el propio Google ...

Además, me gustaría indicarle una optimización de nivel superior, como herramientas que pueden transformar su código javascript en una forma compacta (por ejemplo, eliminar espacios en blanco, cambiar el nombre de variables privadas de my_mother_really_likes_this_number_of_unicorns a m1 ); Además, cosas como JQuery vienen en una forma "precomprimida". Lo mismo existe para HTML. No facilita la depuración de las cosas, pero como parece que te interesa el ahorro de espacio definitivo ...


Gran pregunta, y un tema subexpuesto. Su intuición es sólida: para algunos algoritmos de compresión, elegir el nivel máximo de compresión puede requerir más trabajo del descompresor cuando se desempaqueta.

Afortunadamente, eso no es cierto para gzip: no hay una sobrecarga adicional para el cliente / navegador para descomprimir archivos gzip más comprimidos (por ejemplo, elegir 9 para la compresión en lugar de 6, asumiendo el código base de código zlib estándar que la mayoría de los servidores usan). La mejor medida para esto es la tasa de descompresión , que para los propósitos actuales es en unidades de MB / seg, mientras que también supervisa la sobrecarga como la memoria y la CPU. El simple hecho de pasar por el tiempo de descompresión no es bueno porque el archivo es más pequeño en configuraciones de compresión más altas, y no estamos controlando ese factor si solo estamos usando un cronómetro.

  1. La descompresión de gzip se vuelve asintótica rápidamente en términos de tiempo de descompresión y uso de memoria una vez que se pasa del contenido comprimido del nivel 6. El tiempo para descomprimir líneas planas para los niveles 7, 8 y 9 en los resultados de las pruebas vinculadas por Marcus Müller, aunque se trata de datos generales en segundos completos.

  2. También notará en esos resultados que los requisitos de memoria para la descompresión son planos para todos los niveles de compresión a 0.1 MiB. Eso es casi increíble, solo un grado de excelencia en software que rara vez vemos. Mark Adler y sus colegas merecen apoyos masivos por lo que lograron. gzip es un formato muy bonito.

El uso de la memoria llega a su pregunta sobre los gastos generales. Realmente no hay ninguno. No ganas mucho con el nivel 9 en términos de velocidad de descompresión del navegador, pero no pierdes nada.

Ahora, echa un vistazo a estos resultados de prueba para un poco más de textura. Verá cómo la tasa de descompresión del gzip es ligeramente más rápida con el contenido comprimido de nivel 9 que con los niveles más bajos (en el nivel 9, la tasa de descomposición es aproximadamente un 0,9% más rápida que en el nivel 6, por ejemplo). Eso es interesante y sorprendente. No esperaría que la tasa aumentara. Eso fue solo un conjunto de resultados de pruebas: puede que no sea válido para otros escenarios (y la diferencia es bastante pequeña en cualquier caso).

Nota de despedida: precomprimir archivos estáticos es una buena idea, pero no recomiendo gzip en el nivel 9. Obtendrá archivos más pequeños que gzip-9 al utilizar zopfli o libdeflate . Zopfli es un compresor gzip bien establecido de Google. libdeflate es nuevo pero bastante excelente. En mi prueba, supera a gzip-9, pero aún sigue a zopfli. También puedes usar 7-Zip para crear archivos gzip, y esto será mejor que gzip-9. (En lo anterior, gzip-9 se refiere al uso de la aplicación canónica gzip o zlib que usan Apache y nginx).


No, no hay ningún inconveniente en el lado de la descompresión cuando se utiliza el nivel máximo de compresión. De hecho, hay una ligera ventaja, ya que los datos mejor comprimidos se descomprimen más rápido. La razón es simplemente menos bits comprimidos que el descompresor debe procesar.