javascript - que - qué es js
El mejor compresor de JavaScript (14)
¿Cuál es el mejor compresor de JavaScript disponible? Estoy buscando una herramienta que:
- es fácil de usar
- tiene una tasa de compresión alta
- Produzca resultados finales confiables (no estropea el código)
Al buscar la bala de plata, encontré esta pregunta. Para Ruby on Rails http://github.com/sstephenson/sprockets
Revisando 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 ejecutar en cualquier motor de JavaScript.
--- Vieja respuesta debajo ---
Google lanzó Closure Compiler que parece estar generando los archivos más pequeños que se han visto here y here
Anterior a eso, las diversas opciones fueron las siguientes
Básicamente Packer hace un mejor trabajo en la compresión inicial, pero si vas a descomprimir los archivos antes de enviarlos por el cable (lo que deberías hacer), YUI Compressor obtiene el tamaño final más pequeño.
Las pruebas se realizaron en jQuery code btw.
- Biblioteca original jQuery 62,885 bytes, 19,758 bytes después de gzip
- jQuery minified con JSMin 36,391 bytes, 11,541 bytes después de gzip
- jQuery minimizado con Packer 21.557 bytes, 11.119 bytes después de gzip
- jQuery minimizado 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 con la mejor compresión, así que supongo mmmv
Si usas Packer, solo ve lejos la opción ''encoger variables'' y descomprime el código resultante. La opción base62 solo es válida si su servidor no puede enviar archivos comprimidos. Packer con ''vars de contracción'' logra una mejor compresión del YUI, pero puede introducir errores si te saltas un punto y coma en alguna parte.
base62 es básicamente un gzip de un pobre, por eso el código gzip base62-ed te da archivos más grandes que el código gzipping shrink-var-ed.
Utilizo ShrinkSafe del proyecto Dojo ; es excepcional porque en realidad usa un intérprete de JavaScript ( Rhino ) para tratar de encontrar símbolos en el código y comprender su alcance, etc. lo que ayuda a garantizar que el código funcione cuando salga el otro extremo, a diferencia de muchas herramientas de compresión que usan expresiones regulares para hacer lo mismo (que no es tan confiable).
De hecho, 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 implementarlo y funciona bastante bien.
EDITAR: por cierto, "lo mejor" está abierto al debate, ya que los criterios para "lo mejor" variarán según 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 compresor YUI también utiliza Rhino.
Yo uso jscompressor.com como una aplicación de Chrome.
Aquí está el código fuente de un HttpHandler que hace eso, tal vez te ayude
JSMin es otro.
YUI Compressor es el camino a seguir. Tiene una gran tasa de compresión, está bien probado y está en uso entre muchos sitios importantes, y, bueno, recomendado personalmente por mí.
Lo he usado para mis proyectos sin un solo error de JavaScript o hipo. Y tiene una buena documentación.
Nunca he usado sus capacidades de compresión de CSS, pero también existen. La compresión CSS funciona igual de bien.
Nota: Aunque Dean Edwards''s / Packer / logra una mejor tasa de compresión que YUI Compressor, me encontré con algunos errores de JavaScript al usarlo.
bananascript.com solía darme mejores resultados.
Js Crush es un buen compresor para usar después de haber minimizado.
KJScompress
http://opensource.seznam.cz/KJScompress/index.html
Kjscompress / csskompress está configurado con dos aplicaciones (kjscompress a csscompress) para eliminar espacios en blanco no significativos y comentarios de archivos que contienen JavaScript y CSS. Ambas son aplicaciones de línea de comandos para el sistema operativo GNU / Linux.
Recientemente UglifyJS , un compresor de JavaScript que está escrito en JavaScript (se ejecuta en la plataforma NodeJS Node.js , pero puede modificarse fácilmente para ejecutarse en cualquier motor de JavaScript, ya que no necesita ningún elemento interno de Node.js
). 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 manejar "eval" o "con").
Además de la eliminación de espacio en blanco, UglifyJS también hace lo siguiente:
- cambia los nombres de las variables locales (generalmente a caracteres individuales)
- se une a declaraciones de var consecutivas
- evita insertar corchetes innecesarios, paréntesis y puntos y comas
- optimiza IFs (elimina "else" cuando detecta que no es necesario, transforma IFs en los operadores &&, || o? /: cuando sea posible, etc.).
- transforma
foo["bar"]
enfoo.bar
donde sea posible - elimina citas de claves en literales de objetos, donde sea posible
- resuelve expresiones simples cuando esto lleva a un código más pequeño (1 + 3 * 4 ==> 13)
PD: Ah, también puede "embellecer". ;-)