Mejor compresor JavaScript [cerrado]


¿Cuál es el mejor compresor de JavaScript disponible? Estoy buscando una herramienta que:

  • es fácil de usar
  • tiene una alta tasa de compresión
  • Produce resultados finales confiables (no arruina el código)
Author: Peter Mortensen, 2008-08-26

14 answers

Recientemente publiqué UglifyJS, un compresor de JavaScript que está escrito en JavaScript (se ejecuta en el nodo NodeJS .js, pero se puede modificar fácilmente para ejecutarse en cualquier motor JavaScript, ya que no necesita ningún Node.js interno). Es mucho más rápido que YUI Compressor y Google Closure, se comprime mejor que YUI en todos los scripts en los que lo probé, y es más seguro que Closure (sabe lidiar con "eval" o "with").

Otros además de la eliminación de espacios en blanco, UglifyJS también hace lo siguiente:

  • cambia los nombres de las variables locales (generalmente a caracteres individuales)
  • se une a declaraciones var consecutivas
  • evita insertar corchetes, paréntesis y punto y coma innecesarios
  • optimiza IFs (elimina "else" cuando detecta que no es necesario, transforma IFs en &&, || o ?/ : operadores cuando sea posible, etc.).
  • transforma foo["bar"] en foo.bar cuando es posible
  • elimina las comillas de claves en literales de objetos, cuando sea posible
  • resuelve expresiones simples cuando esto conduce a un código más pequeño(1+3*4 ==> 13)

PS: Oh, puede "embellecer" también. ;-)

 148
Author: mishoo,
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-01-31 09:27:32

Volviendo a esta pregunta unos años más tarde, UglifyJS, parece ser la mejor opción a partir de ahora.

Como se indica a continuación, se ejecuta en la plataforma NodeJS, pero se puede modificar fácilmente para ejecutarse en cualquier motor JavaScript.

- - - Antigua respuesta abajo - - -

Google liberado Compilador de Cierre que parece estar generando los archivos más pequeños hasta ahora como se ve aquí y aquí

Antes de que las diversas opciones eran como follow

Básicamente Packerhace un mejor trabajo en la compresión inicial , pero si vas a gzip los archivos antes de enviar en el cable (que debería estar haciendo) YUI Compressor obtiene el tamaño final más pequeño.

Las pruebas se realizaron en código jQuery por cierto.

  • Biblioteca jQuery original 62,885 bytes, 19,758 bytes después de gzip
  • jQuery minificado con JSMin 36.391 bytes, 11.541 bytes después de gzip
  • jQuery minificado con Packer 21.557 bytes, 11.119 bytes después de gzip
  • jQuery minificado con el compresor YUI 31,822 bytes , 10,818 bytes después de gzip

@daniel james menciona en el comentario compressorrater que muestra a Packer liderando la tabla en la mejor compresión, así que supongo que ymmv

 124
Author: Pat,
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
2017-05-23 11:46:22

YUI Compressor es el camino a seguir. Tiene una gran tasa de compresión, está bien probado y está en uso entre muchos sitios principales, y, bueno, personalmente recomendado por mí.

Lo he usado para mis proyectos sin un solo error de JavaScript o hipo. Y tiene buena documentación.

Nunca he utilizado sus capacidades de compresión CSS, pero existen también. La compresión CSS funciona igual de bien.

Nota: Aunque Dean Edwards / packer / logra una mejor tasa de compresión que el compresor YUI, me encontré con algunos errores de JavaScript al usarlo.

 43
Author: kamens,
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-08-14 23:39:34

Uso ShrinkSafe del proyecto Dojo - es excepcional porque en realidad utiliza un intérprete JavaScript ( Rhino) para tratar de encontrar símbolos en el código y comprender su alcance, etc. lo que ayuda a asegurar que el código funcionará cuando salga del otro lado, a diferencia de muchas herramientas de compresión que usan expresiones regulares para hacer lo mismo (lo cual no es tan confiable).

En realidad tengo una tarea de MSBuild en un Proyecto de Implementación Web en mi solución actual de Visual Studio que ejecuta un script que a su vez ejecuta todos los archivos JS de la solución a través de ShrinkSafe antes de implementar y funciona bastante bien.

EDITAR: Por cierto, "mejor" está abierto al debate, ya que los criterios para "mejor" variarán dependiendo de las necesidades del proyecto. Personalmente, creo que ShrinkSafe es un buen equilibrio; para algunas personas que piensan que el tamaño más pequeño == mejor, será insuficiente.

EDITAR: Vale la pena señalar que el YUI compressor también utiliza Rhino.

 8
Author: Jason Bunting,
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
2010-08-24 16:35:22

Pruebe JSMin, tiene C#, Java, C y otros puertos y también está disponible.

 5
Author: chakrit,
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
2008-08-26 19:42:48

Si usa Packer, simplemente vaya lejos con la opción 'reducir variables' y borre el código resultante. La opción base62 es solo para si su servidor no puede enviar archivos comprimidos con gzip. Packer con 'shrink vars' logra una mejor compresión del YUI, pero puede introducir errores si se ha saltado un punto y coma en algún lugar.

Base62 es básicamente el gzip de un pobre hombre, por lo que gzipping base62-ed code te da archivos más grandes que gzipping shrink-var-ed code.

 4
Author: jcoglan,
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
2008-08-28 14:43:38

JSMin es otro.

 3
Author: Mark Biek,
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
2008-08-26 19:41:56

En la búsqueda de bala de plata, encontró esto pregunta. Para Ruby on Rails http://github.com/sstephenson/sprockets

 2
Author: woto,
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
2010-05-19 14:29:14

Aquí está el código fuente de un HttpHandler que hace eso, tal vez te ayude

 1
Author: juan,
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
2008-08-26 19:48:33

Aquí es un script compresor YUI ( Byuic) que encuentra todos los js y css por un camino y comprime /(opcionalmente) los ofusca. Agradable para integrar en un proceso de construcción.

 1
Author: jimg,
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
2008-08-26 22:35:02

Bananascript.com solía darme mejores resultados.

 1
Author: Paweł Hajdan,
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
2008-09-15 18:50:53

KJScompress

Http://opensource.seznam.cz/KJScompress/index.html

Kjscompress / csskompress es un conjunto de dos aplicaciones (kjscompress a csscompress) para eliminar no significativos espacios en blanco y comentarios de archivos contiene JavaScript y CSS. Ambos son aplicaciones de línea de comandos para Sistema operativo GNU / Linux.

 1
Author: MicTech,
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-06-07 15:55:07

Js Crush es un buen compresor para usar después de haber minificado.

 1
Author: Alex,
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
2010-08-22 17:47:14

Utilizo jscompressor.com como una aplicación de Chrome.

 1
Author: MartinPalermo,
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-04-10 21:55:43