2010-04-07 16 views
30

¿Hay algún propósito válido para minificar antes de comprimir? Parece muy poco probable que el archivo gzip sea más pequeño si se minimiza primero.¿Hay algún beneficio en minimizar JavaScript antes de descomprimirlo?

Lo pregunto porque diagnosticar problemas de producción en código minificado es sustancialmente más difícil, y me pregunto si las personas se están sometiendo a eso sin ningún propósito.

+2

esto es realmente fácil de verificar ... y debe hacerlo con sus archivos reales; o no te preocupes por eso y simplemente gzip –

+0

Acabo de probar esto en un archivo que tengo aquí. Es 160kb desempacado, 56kb embalado.Gzip usando la misma configuración, el desempaquetado se convierte en 28kb y el empaquetado en 23kb. – nickf

+0

@Steve, eche un vistazo a Compressor Rater, puede comparar su código con varias herramientas populares de minificación, con y sin los efectos de la compresión gzip adicional: http://compressorrater.thruhere.net/ – CMS

Respuesta

21

Sí, definitivamente hay un beneficio.

La reducción es una compresión con pérdida, mientras que la compresión es sin pérdida. Ergo, al minimizar, eliminas los datos innecesarios (como los comentarios y los nombres variables largos), lo que siempre ayudará a que tu archivo sea más pequeño. Incluso con gzip todavía habrá una diferencia en la mayoría de los casos.

Ejemplo:

function foo(this_is_my_variable){ 
    var this_is_my_other_variable = 0; 
    this_is_my_other_variable = this_is_my_other_variable + this_is_my_variable; 
    return this_is_my_other_variable; 
} 

que podrían ser minified a:

function foo(a){ 
    var b = 0; 
    b = b +a; 
    return b; 
} 

O si el Minifier es inteligente:

function foo(a){ 
    return a; 
} 

Todo el código da los mismos resultados, pero el tamaño difiere mucho

+2

gzip también hará que la repetida "this_is_my_variable" sea más corta. Sus tres ejemplos gzip a 98, 70 y 51 bytes. – Thilo

+0

@Thilo: no más corto que las variables de un solo carácter, aunque .. – nickf

+3

Es cierto que el minificador ayuda al eliminar los comentarios; no es cierto que acortar los nombres de variable largos ayude ya que el desinflado de gzip ya se ocupa de eso (lo único que se beneficiará de la minimización en este caso es el tamaño del diccionario). – vladr

3

Quizás. Más allá de la eliminación del espacio en blanco, la minimización de JavaScript puede conducir a más repeticiones del mismo texto, lo que puede significar una compresión ligeramente mayor con gzip. Afortunadamente, es fácil hacer un antes y después, ya que la herramienta de línea de comandos gzip, común en * nix y available for Windows utiliza el mismo algoritmo de compresión (aunque no exactamente el mismo formato).

1

Siempre he visto una reducción notable en el número final de bytes cuando minimizo antes de gzip.

Tengo una secuencia de comandos php de trabajo de 20 minutos que interactúa con el compresor yui, y el compilador de cierre de Google. Me muestra antes y después de los bytes, incluso después de gzip, así que es bastante fácil de verificar.

22

En cuanto al tamaño de archivo en bruto, aquí es una muestra (jQuery 1.4.2):

$ curl http://code.jquery.com/jquery-1.4.2.js | gzip > jquery.gz 
$ curl http://code.jquery.com/jquery-1.4.2.min.js | gzip > jquery-min.gz 

$ ls -la jquery* 
-rw-r--r-- 1 me staff 24545 Apr 7 12:02 jquery-min.gz 
-rw-r--r-- 1 me staff 45978 Apr 7 12:02 jquery.gz 

Así que la versión miniaturizada es aproximadamente la mitad del tamaño.

2

También puede ayudar a acelerar el análisis del código de javascript en el navegador. Dependiendo del tamaño de sus archivos, el navegador puede pasar una gran cantidad de tiempo analizando y simbólicamente el archivo que se reducirá mediante la minificación.

Por supuesto, solo la evaluación comparativa y la creación de perfiles le dirá si realmente va a ser un beneficio para su situación particular.

Lo que encuentro que funciona mejor es que guardo las versiones tanto minificadas como no minificadas de todos mis archivos .js en mi sitio web y simplemente utilizo un conmutador de configuración para cambiar entre los dos. De esta forma, la producción normal puede usar la versión minimizada y luego, si tengo que depurar algo, simplemente active el interruptor y la versión no ministrada se servirá en su lugar. (El proceso de compilación asegura que las versiones minimizadas y no minificadas están sincronizadas, por supuesto)

+0

Realmente no debería estar depurando en un sitio web de producción. – Ben

Cuestiones relacionadas