Niveles de compilación de Closure Compiler

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 con ADVANCED_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.

Captura de pantalla de la IU

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