2009-03-01 11 views
53

¿Qué se usa para minimizar y comprimir bibliotecas de JavaScript?¿Qué se usa para minimizar y comprimir bibliotecas de JavaScript?

+0

partir de una recompensa para ver si hay nuevos acontecimientos ocurridos desde 2009. –

+2

La forma en que la pregunta está redactada, que debería haber sido wiki de la comunidad. Cualquiera puede responder la pregunta (incluso si la respuesta es "nada"), y no puede haber respuestas incorrectas ... – Guffa

Respuesta

33

Yo uso YUI Compressor. ¡Parece hacer bien el trabajo!

+0

En mi experiencia, YUI Compressor ha sido el más seguro, pero el más agresivo. –

+0

YUIcompressor tiene algunos efectos secundarios negativos. Se incluye con una versión de Rhino quebrada que rompe cualquier javascript del lado del servidor con Rhino. – fforw

+1

Agregue un enlace a esta versión en línea, si lo desea, a veces solo tengo 1 archivo que quiero convertir rápidamente. http://www.refresh-sf.com/yui/ – Marko

4

Dean Edward's packer logra unas relaciones de compresión bastante buenas. Tiene implementaciones de línea de comandos que le permiten ser utilizado en un proceso de integración continua.

+6

Se ha demostrado que el empacador es peor que la compresión normal, debido a la sobrecarga de desempaquetar en el navegador. – Magnar

3

He intentado el compresor YUI antes, pero me da un mensaje de error.

sugiere emplear JSMin a minify su javascript:

http://www.crockford.com/javascript/jsmin.html

+0

Douglas Crockford es el arquitecto de Javascript en Yahoo. Creo que él es el arquitecto del compresor YUI. – Swanand

+1

No. Doug trabaja para Yahoo pero fue el creador de JSMin. El compresor YUI fue creado por Julien Lecomte. Está escrito en Java - No creo que Doug vuelva a escribir Java otra vez :) – johnhunter

11

Yo también uso YUI Compressor. Tengo una tarea de hormiga como este que yo uso en mis proyectos:

<!-- 
YUI Compressor tasks 
http://www.julienlecomte.net/yuicompressor/README 
--> 
<property name="yuicompressor.jar" 
      value="C:/devlibs/yuicompressor-2.2.4/build/yuicompressor-2.2.4.jar"/> 

<target name="js.compress"> 
    <!-- Create min directory under js direcrtory if it doesnt exist --> 
    <mkdir dir="${js-directory}/min" /> 

    <apply verbose="true" executable="java" parallel="false" failonerror="true"> 
     <fileset dir="${js-directory}" includes="*.js"/> 
     <arg line="-jar"/> 
     <arg path="${yuicompressor.jar}"/> 
     <srcfile/> 
     <arg line="-o"/> 
     <mapper type="glob" from="*.js" to="${js-directory}/min/*-min.js"/> 
     <targetfile/> 
    </apply> 
</target> 
12

No minimizar JavaScript en absoluto: la compresión gzip es lo suficientemente bueno para mí y tiene la ventaja adicional de que los mensajes de error serán útiles.

+3

+1 Minimizar el código de cambios y * puede * introducir errores. – mark

+1

Claro, pero todavía le da un beneficio extra más allá de gzipping solo. Solo asegúrate de hacer todas tus pruebas con la versión minimizada. –

+1

¿Y qué ocurre con los usuarios que tienen protección antivirus o por algún otro motivo están bloqueando enableGzip? – Louis

42

he utilizado YUI Compressor durante mucho tiempo y no he tenido problemas con él, pero recientemente se han empezado a utilizar y Google Closure Compiler tenido algún éxito con eso. Mis impresiones hasta el momento:

  • En general, supera a YUI Compressor en términos de reducción de tamaño de archivo. Por una pequeña cantidad en modo simple, y mucho en modo avanzado.
  • El modo simple ha sido hasta ahora tan confiable como el compresor YUI. Nada de lo que he alimentado ha mostrado ningún problema.
  • El modo de "compilación" avanzado es ideal para algunas secuencias de comandos, pero la reducción de tamaño dramático de la secuencia de comandos se produce a expensas de una gran cantidad de intromisión en el código que tiene una buena probabilidad de romperlo. Hay ways to deal with some of these problems y entender lo que hace puede ser de gran ayuda para evitar problemas, pero generalmente evito usar este modo.

Pasé al uso del compilador de cierres de Google en el modo simple de "compilación", ya que supera ligeramente al compresor YUI en general. Lo he usado mucho menos que con YUI Compressor, pero por lo que he visto hasta ahora, lo recomendaría.

Otro que aún tengo que probar pero parece prometedor es Mihai Bazon's UglifyJS.

+2

Google Closure Compiler es el que recomendaría absolutamente. Como tú, el modo simple acaba de funcionar ... sin problemas. – Adam

1

http://code.google.com/p/jsmin-php/

El bueno de Doug Crockford :-) La belleza de esto es que con el control de caché puede obtener la compresión somelovely automatizado sólo cuando es necesario. O en uno de mis proyectos, solo imprimo los archivos comprimidos/gzip y los borro cuando realizo un cambio. Para un entorno de desarrollo, simplemente no llamo al script de minificación.

0

Uso el JavaScript :: Minifier de perl. Funciona bastante bien y puedes, por ejemplo, reemplace algunas frases usando perl.

5

UglifyJS es uno nuevo.

UglifyJS comprime mejor que YUI Compresor y casi a la par con la Cierre Compilador Google. Para el ejemplo , la versión comprimida de jQuery del compilador de Google es sólo 403 bytes más pequeña que la versión producida por UglifyJS - ¡impresionante! UglifyJS es también el más rápido para ejecutar por un tiro largo, superando ¡Cierre por más de 6 segundos!

Además, el código producido por UglifyJS es más seguro que el código que genera Closure. Por ejemplo, Cierre no sabe cómo tratar con eval o con {} - simplemente registra un error y continúa cambiando el nombre de las variables de todos modos. Esto, obviamente, lleva al código roto . UglifyJS no tiene este problema.

Más información se puede encontrar aquí: http://badassjs.com/post/971960912/uglifyjs-a-fast-new-javascript-compressor-for-node-js

+2

¡Qué nombre tan brillante! –

4

closure herramientas de Google

Puede asignar la versión minified al código fuente regular para la depuración de Firebug con su complemento.

22

Tienes una manada de posibilidades aquí:

Desde mi experiencia personal, yo recomiendo que utilice el SDK Dojo para construir una estructura de encargo, que luego se puede a su vez configure para usar su compilador habitual ShrinkSafe o Google Closure, which they now support as well.

En términos de compresión, creo que Google Closure es el que mejor rendimiento ha tenido hasta ahora, sin embargo, generalmente estoy satisfecho con ShrinkSafe y es un poco mayor y más robusto, mientras que Closure Compiler parece un poco nuevo niño en el barrio (que a los interesados ​​podría no gustarles demasiado, por ejemplo).

Algunas personas juran solo por el compresor YUI sin embargo. Yo personalmente no puedo responder por eso.

Ahora bien, si usted pregunta era para comprimir bibliotecas y no sólo su propio código JavaScript, es obvio que se pone muy más complicado, ya que se necesita para la mayoría de estas herramientas para exportar los símbolos que no debe ser cambiado de nombre o despojados. La mayoría de los compresores decentes eliminarán las funciones que creen que no se usan, a menudo el caso de una biblioteca, si no está vinculado a un proyecto, obviamente, y cambian los nombres para acortarlos y usar menos caracteres, también un problema ya que obviamente quieres un público API para no ser manipulado.

Puede encontrar otros hilos sobre este tema también y encontrar información en la documentación de soporte de las herramientas. Es posible que también desee echar un vistazo a JSBuilder2, una especie de colgante de la herramienta Dojo's Build (por lo tanto, utilizando ShrinkSafe o Closure Compiler) para ExtJS (utilizando el compresor YUI).

(Lo sentimos, siendo un usuario nuevo SO, no puedo añadir más de un enlace por lo que no se puede conectar directamente a las herramientas.)

EDIT: en relación con las preocupaciones expresadas en algunas respuestas que la compresión puede introducir errores y que hace que la depuración sea más fácil ya que el código no se destruye: sí, es una preocupación válida. Sin embargo:

  • obtendrá una mejora muy significativa en términos de ancho de banda si se utiliza un Minifier, incluso con la compresión gzip activado (y se puede aprender a aprovechar la compresión gzip, haciendo la vida del compresor más fácil
  • que debiera simplemente pruebe su código en modo de depuración y producción para asegurar que el comportamiento sea idéntico. Es decir, también es parte de su trabajo ...
  • algunos de estos compresores han existido por un tiempo y realmente no introducirán errores en su código. Realmente están reorganizando cosas y sustituyendo cadenas, de verdad.
  • algunos compresores (para ejemplo, el sistema de compilación de dojo) vienen con opciones que le permiten producir tanto una salida comprimida como una salida sin comprimir, para que luego pueda habilitar diferentes modos para la depuración y producción, usando parámetros de consulta, por ejemplo.
3

Aquí hay una solución de Microsoft que puede integrar en Visual Studio para minimizar los archivos automáticamente cuando crea su proyecto.

instalar:

Descargar el msi de: http://aspnet.codeplex.com/releases/view/40584

Es posible que tenga que reiniciar el equipo después de su acabado.

de usar:

editar el archivo .csproj e incluyen lo siguiente al final del archivo (pero antes de la etiqueta </Project>):

<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" /> 

<Target Name="AfterBuild"> 
    <ItemGroup> 
     <JS Include="**\*.js" Exclude="**\*.min.js;Scripts\*.js" /> 
     <CSS Include="**\*.css" Exclude="**\*.min.css" /> 
    </ItemGroup> 
    <AjaxMin 
    JsSourceFiles="@(JS)" 
    JsSourceExtensionPattern="\.js$" 
    JsTargetExtension=".min.js" 
    CssSourceFiles="@(CSS)" 
    CssSourceExtensionPattern="\.css$" 
    CssTargetExtension=".min.css"/> 
</Target> 

Ahora, cuando usted construye su proyecto, todos los archivos CSS y js que no terminan en .min.js, .min.css serán minificados (Ver el atributo "Excluir" para excluir que otros archivos sean miniados).

Cuestiones relacionadas