2010-01-08 11 views
6

Minimizo mis archivos css y js sobre la marcha con google.codes minify. También he configurado mi .htaccess para usar desinflar en todos mis archivos css y js, razón por la cual algunos archivos js (como shadowbox y tinymce) hacen referencia a otros archivos js en el código. Así que estoy comprimiendo con apache deflate y también minimizo comprime algunos archivos js y css con gzip - ¿estoy creando sobrecarga haciendo esto? Primero se ejecutará gzipping (minify) y luego zlib (deflate) nuevamente. O apache desinflar ignorar los archivos ya gzipped que tienen los atributos establecidos por minify en los encabezados. Alguien tiene alguna experiencia con esto?Combinando deflate y minify - ¿estoy creando gastos generales?

+0

¡Esa es una muy buena pregunta! No tengo idea de cuál es la respuesta, pero el autor de Minify parece muy receptivo en su grupo de discusión: https://groups.google.com/group/minify – Annie

Respuesta

5

Minificación + desinflar/gzip funciona muy bien.

Uso mod rewrite para hacer eso, precompuse todos los archivos css/js en 2 versiones, originales y .css.gz/.js.gz.

Navegador simplemente envía la solicitud .js/.css, el servidor comprueba la existencia de .js.gz/.css.gz y devuelve el contenido comprimido si se cumplen ciertas condiciones.

Por lo tanto, no importa para js archivo/css se cargan sobre la marcha desde js (por ejemplo, su shadowbox o tinymce)

Básicamente, como este

RewriteEngine On 
RewriteBase/

#Check for browser's Accept-Encoding, 
RewriteCond "%{HTTP:Accept-Encoding}" "gzip.*deflate|deflate.*gzip" 

#check file name is endswith css or js 
RewriteCond %{REQUEST_FILENAME} "\.(css|js)$" 

#check existance of .gz file name 
RewriteCond %{REQUEST_FILENAME}.gz -s 

#rewrite it to .js.gz or .css.gz 
RewriteRule ^.*$ %{REQUEST_URI}.gz [L] 

#update some response header 
<FilesMatch "\.js\.gz$"> 
    AddEncoding gzip .gz 
    ForceType "text/javascript" 
</FilesMatch> 

<FilesMatch "\.css\.gz$"> 
    AddEncoding gzip .gz 
    ForceType "text/css" 
</FilesMatch> 
+0

¡Gracias por eso! ¡Excelente script que tienes allí! Pero ya sabes que la herramienta minify (no la minificación en general) de google realmente minimiza Y envía los archivos con compresión y luego lo haría de nuevo con la parte del servidor (apache desinflar sobre la marcha). Y al hacerlo dos veces me preguntaba si estaba creando gastos generales ... lo siento si no estaba claro ... –

+0

¿Quieres decir doble gzipping? Supongo que no será así porque los navegadores no sabrán su necesidad de descomprimir 2 veces. – YOU

1

gzip utiliza el algoritmo de compresión zlib , y la mayoría de las secuencias de bytes no se comprimirán bien la segunda vez.

+0

oh, no sabía que gzip usa librerías zlib ... pensé que esa era la diferencia entre gzip y desinflar. gzip usando las bibliotecas well gzip y desinflar usando las bibliotecas zlib. pero la pregunta es si el archivo se comprimirá por duplicado, estoy seguro de que no se hará mucho más pequeño, pero el cliente tendría que primero descromover el desinflado y luego los archivos minificados, lo mismo para el servidor. entonces debe haber una cabeza allá arriba ...? –

+3

Si usted ya sabe que no se volverá más pequeño, entonces ¿por qué hacerlo? :) –

1

Minify no sirve los archivos a través de Apache, por lo que no hay doble codificación.

Con el filtro DEFLATE, Apache gzip el archivo solicitado sobre la marcha cada vez. Minify gzips el archivo en la primera solicitud y luego envía la versión en antememoria almacenada en caché para solicitudes posteriores.

Al estar basado en PHP, intercambia el rendimiento por flexibilidad y facilidad de mantenimiento, pero si lanza un caché de proxy delante de él, funcionará tan bien como la configuración de S.Mark.

Cuestiones relacionadas