50

YUI Compressor fue la mejor herramienta de consenso para minimizar, pero Closure parece que podría ser mejor.¿Debo usar el compresor YUI o el nuevo compilador Google Closure para comprimir mi JavaScript?

+7

+1 por decirme acerca de Google Closure, que nunca escuché :) –

+2

También agregaré que hay un empacador poco conocido aquí: http://dean.edwards.name/packer esto es Hasta donde yo sé, el que da los mejores resultados pero necesita agregar todos los puntos y comas implícitos, use JSlint para ese –

+3

packer ha caído en desgracia debido a que necesita descomprimir en cada ejecución. – Nosredna

Respuesta

27

"Lo que sea mejor para usted" Creo que es la respuesta general en este momento - YUI ha estado disponible por más tiempo, sin duda será el que actualmente tiene el consenso como la mejor herramienta. Mientras que Closure es nuevo para nosotros, entonces no hay tanta experiencia con Closure como con YUI. Por lo tanto, no creo que encuentre argumentos convincentes en el mundo real sobre por qué usar Closure basado en las experiencias de las personas simplemente porque es nuevo.

Eso no quiere decir que no deba usar Closure .... solo mi ronda sobre la forma de decir, no creo que haya una respuesta disponible hasta que un número de personas haya usado los 2 y los haya comparado.

Editar: Hay un par de comparaciones tempranas, diciendo Cierre da una mejora: http://blog.feedly.com/2009/11/06/google-closure-vs-yui-min/
http://news.ycombinator.com/item?id=924426

Además Editar: vale la pena mantener un ojo en la lista de tema para el cierre: http://code.google.com/p/closure-compiler/issues/list

10

El cierre se puede usar en el modo Simple o en el modo Avanzado. El modo simple es bastante seguro para la mayoría del código JavaScript, ya que solo cambia el nombre de las variables locales en funciones para obtener una mayor compresión.

El modo avanzado es mucho más agresivo. Cambiará el nombre de las claves en literales de objeto y llamadas de función en línea si puede determinar si devuelven valores simples sin efectos secundarios.

Por ejemplo:

function Foo() 
{ 
    return "hello"; 
} 

alert(Foo()); 

se traduce a:

alert("hello"); 

Y este código:

var o = {First: "Mike", Last: "Koss"}; 
alert(o); 

se traduce a:

alert({a:"Mike",b:"Koss"}); 

puede evitar que el modo avanzado de cambio de valores clave en objetos literales citando los nombres como esto:

{'First': "Mike", 'Last': "Koss"} 

Puede probar estos y otros ejemplos en Google de Closure Compiler site interactiva.

+0

El compilador de cierre incluso arrancará las entrañas de las funciones en línea, acelerando drásticamente el código. – Nosredna

+0

El Compilador de cierre alineará las funciones en modo simple pero no en la función global. – John

5

Creo que depende de su código. Si desea compilar su propio código, entonces creo que vale la pena parchar el código para que funcione con Closure Compiler (algunas cosas pueden parecer un poco incómodas al principio). Creo que el Closure Compiler pronto será la mejor opción para esos trabajos y también hará que arregles un poco tu código y mantengas un estilo consistente (por supuesto depende de tus preferencias, es posible que odies algunas partes, lo hago: PAG).

Si depende de otras bibliotecas, en mi opinión, debería esperar un poco hasta que se publiquen las versiones compatibles Closure Compiler. No debería tomar mucho tiempo para la mayoría de las bibliotecas populares que existen.Y tal vez pueda proporcionar soluciones para las bibliotecas "no tan activas" que usa usted mismo.

Estoy hablando de avanzada Compilación modo que aquí, la simple recopilación el modo como algunos han señalado es bastante seguro de usar.

Y aquí hay una opinión diferente - Google Closure ? I'm Not Impressed. Es tal vez un poco demasiado duro, pero agradable de leer. Supongo que solo el tiempo dirá cuál es mejor =)

+0

porque no te permite salirte con 'eval()'? – rxgx

14

De las comparaciones que he visto, el cierre parece ser el claro ganador en términos de minimizar el tamaño del archivo. Este artículo utiliza tres bibliotecas JS populares (jQuery, Prototype, Mootools) para comparar compresión entre Closure Compiler YUI Compresor y: http://www.bloggingdeveloper.com/post/Closure-Compiler-vs-YUI-Compressor-Comparing-the-Javascript-Compression-Tools.aspx

Cierre salga delante de cada prueba, sobre todo en su modo avanzado, donde se "minimiza código tamaño alrededor de 20-25% más que el compresor YUI al proporcionar casi 60% de compresión ".

+0

Gracias por el enlace. –

7

Parece que jQuery 1.5 acaba de mudar a UglifyJS:

Además, con este interruptor hemos comenzaron a utilizar UglifyJS de la Google Closure Compiler. Hemos visto algunas mejoras de tamaño de archivo sólido mientras lo usamos, así que estamos bastante contentos con el interruptor.

+0

Gracias por publicar eso. ¡Ni siquiera había oído hablar de eso! – Sonny

+0

Es más rápido y comprime más que YUI, y seguro que es mejor tener que instalar Java para Closure Compiler. – rxgx

+0

Ya no es cierto: http://docs.jquery.com/Frequently_Asked_Questions#How_do_I_compress_my_code.3F – SeanDowney

2

a partir de octubre de 2012, se ve como YUI compresor ahora es obsoleto, o al menos ya no va a ser utilizado en YUI: http://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor/

+1

Compresor YUI aún se está desarrollando (última versión de mayo de 2013): http: //www.yuiblog.com/blog/2013/05/16/yuicompressor-2-4-8-released/https://github.com/yui/yuicompressor – benebun

Cuestiones relacionadas