El compilador de Closure te permite elegir entre tres niveles de compilación, desde la simple eliminación de espacios en blanco y comentarios hasta transformaciones agresivas del código.
WHITESPACE_ONLY
El nivel de compilación WHITESPACE_ONLY
quita los comentarios de tu código y también los saltos de línea, los espacios innecesarios, la puntuación superflua (como paréntesis y puntos y comas) y otros espacios en blanco. El JavaScript de salida es funcionalmente idéntico al JavaScript fuente.
La transpilación de las funciones del lenguaje seguirá ocurriendo si el modo de lenguaje de salida solicitado es diferente del modo de lenguaje de entrada.
Consulta --language_in
y --language_out
en Marcas y opciones.
Este nivel de compilación proporciona la menor compresión de los tres niveles.
SIMPLE_OPTIMIZATIONS
El nivel de compilación SIMPLE_OPTIMIZATIONS
realiza la misma eliminación de espacios en blanco y comentarios que WHITESPACE_ONLY
, pero también realiza optimizaciones dentro de las expresiones y funciones, incluido el cambio de nombre de las variables locales y los parámetros de función a nombres más cortos. Cambiar el nombre de las variables por nombres más cortos hace que el código sea significativamente más pequeño. Dado que el nivel SIMPLE_OPTIMIZATIONS
solo cambia el nombre de los símbolos locales de las funciones, no interfiere en la interacción entre el código JavaScript compilado y otro código JavaScript.
La compilación con SIMPLE_OPTIMIZATIONS
siempre conserva la funcionalidad de JavaScript sintácticamente válido, siempre que el código no acceda a variables locales con nombres de cadenas (por ejemplo, con instrucciones eval()
o llamando a toString en funciones).
SIMPLE_OPTIMIZATIONS
es el nivel de compilación predeterminado.
ADVANCED_OPTIMIZATIONS
El nivel de compilación ADVANCED_OPTIMIZATIONS
realiza las mismas transformaciones que SIMPLE_OPTIMIZATIONS
, pero agrega una variedad de transformaciones globales más agresivas para lograr la mayor compresión de los tres niveles. El nivel ADVANCED_OPTIMIZATIONS
comprime JavaScript mucho más de lo que es posible con otras herramientas.
Para habilitar esta compresión extrema, ADVANCED_OPTIMIZATIONS
realiza suposiciones sólidas sobre el código compilado. Si tu código no cumple con esos supuestos, ADVANCED_OPTIMIZATIONS
producirá código que no se ejecutará.
Por ejemplo, es posible que el código compilado con ADVANCED_OPTIMIZATIONS
no funcione con código sin compilar, a menos que tomes medidas especiales para garantizar la interoperabilidad. Si no marcas las funciones y propiedades externas a las que se hace referencia en tu código, Closure Compiler cambiará de nombre de forma inapropiada las referencias en tu código, lo que provocará discrepancias entre los nombres en tu código y en el código externo.
Para obtener más información sobre cómo preparar tu código para ADVANCED_OPTIMIZATIONS
, consulta Compilación avanzada y externs.
Las transformaciones de ADVANCED_OPTIMIZATIONS
incluyen lo siguiente:
- Cambio de nombre más agresivo:
La compilación con
SIMPLE_OPTIMIZATIONS
solo cambia el nombre de los parámetros y las variables dentro de las funciones.ADVANCED_OPTIMIZATIONS
también cambia el nombre de las variables globales, los nombres de las funciones y las propiedades. - Eliminación de código no utilizado:
La compilación con
ADVANCED_OPTIMIZATIONS
quita el código que se puede demostrar que es inaccesible. Esto es especialmente útil en combinación con bibliotecas grandes. Si solo usas algunas funciones de un archivo de biblioteca grande, el compilador puede quitar de su salida todo lo que no sean esas funciones. - Inserción global:
La compilación con
ADVANCED_OPTIMIZATIONS
reemplaza algunas llamadas a funciones por el cuerpo de la función. Esta transformación se conoce como "inserción en línea". El compilador solo inserta funciones cuando determina que la inserción es segura y ahorra espacio. La compilación conADVANCED_OPTIMIZATIONS
también inserta constantes y algunas variables cuando el compilador determina que puede hacerlo de forma segura.
Cómo establecer el nivel de compilación
Para establecer el nivel de compilación en la aplicación de Closure Compiler, incluye la marca de línea de comandos --compilation_level
con un valor de WHITESPACE_ONLY
, SIMPLE
o ADVANCED
, como en el siguiente comando:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js