¿Debo usar el compresor YUI o el nuevo compilador de cierre de Google para comprimir mi JavaScript?


YUI Compressor fue la mejor herramienta de consenso para minimizar, pero el cierre parece que podría ser mejor.

Author: Maiku Mori, 2009-11-06

7 answers

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

Eso no quiere decir que no deberías usar el cierre....solo mi forma de decir, no creo que haya una respuesta disponible para esto hasta que un número de personas hayan usado el 2 y los hayan comparado.

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

Más editar: Vale la pena mantener un ojo en la lista de temas para el cierre: http://code.google.com/p/closure-compiler/issues/list

 27
Author: AdaTheDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-06 15:34:37

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 la compresión entre YUI Compressor y Closure Compiler: http://www.bloggingdeveloper.com/post/Closure-Compiler-vs-YUI-Compressor-Comparing-the-Javascript-Compression-Tools.aspx

El cierre sale al frente en cada prueba, particularmente en su modo avanzado, donde " minimiza el código tamaño alrededor de 20-25% más que el compresor YUI al proporcionar casi 60% de compresión."

 14
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-14 11:15:50

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 las funciones para obtener una mayor compresión.

El modo avanzado es mucho más agresivo. Cambiará el nombre de las claves en los literales de objetos y las llamadas a funciones en línea si puede determinar que devuelven valores simples sin efectos secundarios.

Por ejemplo:

function Foo()
{
  return "hello";
}

alert(Foo());

Se traduce como:

alert("hello");

Y esto código:

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

Se traduce como:

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

Puede evitar que el modo avanzado cambie los valores de clave en los literales de objetos citando los nombres de esta manera:

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

Puedes probar estos y otros ejemplos en el sitio interactivo del compilador de cierre de Google .

 10
Author: mckoss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-07 16:21:31

Parece que jQuery 1.5 se acaba de mover a UglifyJS :

Además con este interruptor hemos se trasladó a usar UglifyJS desde el Compilador de Cierre de Google. Hemos visto algunas mejoras de tamaño de archivo sólido mientras lo usa, por lo que estamos muy contentos con el interruptor.

 7
Author: Kevin Hakanson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-01 03:18:22

Creo que depende de tu código. Si quieres compilar tu propio código, entonces creo que vale la pena parchear el código para que funcione con Closure Compiler (algunas cosas pueden parecer un poco incómodas al principio). Creo que El Compilador de cierre pronto será la mejor opción para tales trabajos y también le hará ordenar un poco su código y mantener un estilo consistente (por supuesto, depende de sus preferencias, puede que odie algunas partes, lo hago :P ).

Si usted depende de otras bibliotecas entonces, en mi opinión, debería esperar un poco hasta que liberen Compilador de cierre versiones compatibles. No debería tomar mucho tiempo para las bibliotecas más populares que existen. Y tal vez pueda proporcionar correcciones para esas bibliotecas "no tan activas" que usa usted mismo.

Estoy hablando de Modo de Compilación avanzada aquí, el modo de Compilación Simple como algunos han señalado es bastante seguro de usar.

Y aquí hay una opinión diferente - Google Cierre ? No estoy Impresionado . Es tal vez un poco demasiado duro, pero buena lectura. Supongo que solo el tiempo dirá cuál es mejor =)

 5
Author: Maiku Mori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-14 20:36:51

A partir de octubre de 2012, parece que el compresor YUI está obsoleto, o al menos ya no se va a usar en YUI: http://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor /

 2
Author: robd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-17 20:53:29

Puedes hacer algunas pruebas aquí, y ver qué es mejor en cada navegador: http://jsperf.com/closure-vs-yui

 1
Author: Erick Ribeiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-17 20:56:41