¿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
- Produzca resultados finales confiables (no estropea el código)
¿Cuál es el mejor compresor de JavaScript disponible? Estoy buscando una herramienta que:
Respuestas:
Recientemente lancé UglifyJS , un compresor de JavaScript que está escrito en JavaScript (se ejecuta en la plataforma NodeJS Node.js , pero se puede modificar fácilmente para que se ejecute en cualquier motor de JavaScript, ya que no necesita elementos Node.js
internos). 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 tratar con "eval" o "with").
Además de la eliminación de espacios en blanco, UglifyJS también hace lo siguiente:
foo["bar"]
en foo.bar
donde sea posiblePD: Oh, también puede "embellecer". ;-)
Revisar esta pregunta unos años después, UglifyJS , parece ser la mejor opción a partir de ahora.
Como se indica a continuación, se ejecuta en la plataforma NodeJS, pero puede modificarse fácilmente para ejecutarse en cualquier motor de JavaScript.
--- Antigua respuesta a continuación ---
Google lanzó Closure Compiler que parece estar generando los archivos más pequeños hasta ahora, como se ve aquí y aquí
Antes de eso, las diferentes opciones eran las siguientes
Básicamente, Packer hace un mejor trabajo en la compresión inicial, pero si va a comprimir los archivos antes de enviarlos por 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.
@ daniel james menciona en el comentario compresor que muestra a Packer liderando la tabla en la mejor compresión, así que supongo que mmm
\uxxxx
literales de forma predeterminada ... use, por ejemplo, --charset UTF-8
(si está seguro de que le informa al navegador de alguna manera)
El compresor YUI 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 lo recomendé.
Lo he usado para mis proyectos sin un solo error de JavaScript o hipo. Y tiene buena documentación.
Nunca he usado sus capacidades de compresión 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 cuando lo usé.
npm install packer
. (= D
Uso 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 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 implementar y funciona bastante bien.
EDITAR: Por cierto, "mejor" está abierto a debate, ya que los criterios para "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 usa Rhino.
Si usa Packer, simplemente vaya lejos a la opción 'reducir variables' y gzip el código resultante. La opción base62 es solo para si su servidor no puede enviar archivos comprimidos. Packer con 'retráctil vars' logra una mejor compresión de la YUI, pero puede introducir errores si ha omitido un punto y coma en alguna parte.
base62 es básicamente el gzip de un hombre pobre, razón por la cual el código gzipping de base62-ed le proporciona archivos más grandes que el código gzipping shrink-var-ed.
Al buscar la bala de plata, encontré esta pregunta. Para Ruby on Rails http://github.com/sstephenson/sprockets
Aquí está el código fuente de un HttpHandler que hace eso, tal vez te ayude
bananascript.com solía darme los mejores resultados.
KJScompress
http://opensource.seznam.cz/KJScompress/index.html
Kjscompress / csskompress es un conjunto de 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.