Closure Compiler te permite elegir entre tres niveles de compilación, que van desde la simple eliminación de espacios en blanco y comentarios hasta transformaciones de código agresivas.
ESPACIO EN BLANCO
El nivel de compilación de WHITESPACE_ONLY
quita los comentarios del código y también los saltos de línea, los espacios innecesarios, la puntuación innecesaria (como paréntesis y punto y coma), y otros espacios en blanco. El resultado de JavaScript es funcionalmente idéntico al código fuente de JavaScript.
La transpilación de las funciones del lenguaje continuará si el modo de idioma de salida solicitado es diferente del modo de idioma 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.
OPTIMIZACIONES SIMPLE
El nivel de compilación SIMPLE_OPTIMIZATIONS
realiza el mismo espacio en blanco y la eliminación de comentarios que WHITESPACE_ONLY
, pero también realiza optimizaciones dentro de expresiones y funciones, como cambiar el nombre de las variables locales y los parámetros de función a nombres más cortos. Cuando cambias el nombre de las variables por nombres más cortos, el código es mucho más pequeño. Debido a que el nivel de SIMPLE_OPTIMIZATIONS
cambia el nombre solo de símbolos que son locales para las funciones, no interfiere en la interacción entre el JavaScript compilado y otro JavaScript.
La compilación con SIMPLE_OPTIMIZATIONS
siempre conserva la funcionalidad de JavaScript válido desde el punto de vista sintáctico, siempre que el código no acceda a variables locales mediante nombres de string (por ejemplo, mediante sentencias eval()
o llamando a toString en funciones).
SIMPLE_OPTIMIZATIONS
es el nivel de compilación predeterminado.
OPTIMIZACIONES AVANZADAS
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 compresión más alta de los tres niveles. El nivel de 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 firmes sobre el código compilado. Si tu código no cumple con esas suposiciones, 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 no compilado, 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á el nombre de las referencias de tu código de forma inadecuada, lo que provoca discrepancias entre los nombres de tu código y el código externo.
Si quieres obtener más información sobre cómo preparar tu código para ADVANCED_OPTIMIZATIONS
, lee Compilación avanzada y externs.
Las transformaciones 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 entregado:
La compilación con
ADVANCED_OPTIMIZATIONS
quita el código inaccesible. Esto es muy útil en combinación con bibliotecas grandes. Si solo usas unas pocas funciones de un archivo de biblioteca grande, el compilador puede quitar todo, excepto esas funciones, de su resultado. - intercalado 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 “intercalado”. El compilador solo intercala funciones cuando determina que la integración es segura y ahorra espacio. La compilación conADVANCED_OPTIMIZATIONS
también intercala constantes y algunas variables cuando el compilador determina que puede hacerlo de forma segura.
Cómo configurar el nivel de compilación
La IU del servicio de Closure Compiler, la API de servicio y la aplicación tienen métodos diferentes para configurar compilation_level
.
En la IU del servicio de Closure Compiler
Para establecer el nivel de compilación en la IU del servicio de Closure Compiler, haz clic en los botones de selección en la sección Optimización de la interfaz.
En la API del servicio de Closure Compiler
Para establecer el nivel de compilación en la API del servicio de Closure Compiler, incluye un parámetro de solicitud llamado compilation_level
con un valor de WHITESPACE_ONLY
, SIMPLE_OPTIMIZATIONS
o ADVANCED_OPTIMIZATIONS
, como en el siguiente programa de Python:
#!/usr/bin/python2.4 import httplib, urllib, sys params = urllib.urlencode([ ('code_url', sys.argv[1]), ('compilation_level', 'ADVANCED_OPTIMIZATIONS'), ('output_format', 'text'), ('output_info', 'compiled_code'), ]) headers = { "Content-type": "application/x-www-form-urlencoded" } conn = httplib.HTTPSConnection('closure-compiler.appspot.com') conn.request('POST', '/compile', params, headers) response = conn.getresponse() data = response.read() print data conn.close()
En la aplicación de Closure Compiler
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