Closure Compiler vous permet de choisir parmi trois niveaux de compilation, de la simple suppression des espaces blancs et des commentaires aux transformations agressives du code.
Espace blanc uniquement
Le niveau de compilation WHITESPACE_ONLY
supprime les commentaires de votre code, ainsi que les sauts de ligne, les espaces inutiles, les signes de ponctuation superflus (tels que les parenthèses et les points-virgules) et les autres espaces blancs. Le code JavaScript de sortie est fonctionnellement identique au code JavaScript source.
La transcription des caractéristiques de langue continuera de se produire si le mode de langue de sortie demandé est différent du mode de langue de saisie.
Consultez les sections --language_in
et --language_out
dans Options et options.
Ce niveau de compilation permet de compresser le moins possible les trois niveaux.
OPTIMISATIONS SIMPLES
Le niveau de compilation SIMPLE_OPTIMIZATIONS
effectue les mêmes opérations de suppression d'espaces blancs et de commentaires que WHITESPACE_ONLY
, mais procède également à des optimisations au sein des expressions et des fonctions, y compris en renommant les variables locales et les paramètres de fonction en noms plus courts. Renommer les variables en noms plus courts réduit considérablement le code. Étant donné que le niveau SIMPLE_OPTIMIZATIONS
ne renomme que les symboles locaux aux fonctions, il n'interfère pas avec l'interaction entre le code JavaScript compilé et un autre code JavaScript.
La compilation avec SIMPLE_OPTIMIZATIONS
préserve toujours la fonctionnalité d'un code JavaScript valide d'un point de vue syntaxique, à condition que le code n'accède pas aux variables locales en utilisant des noms de chaîne (à l'aide d'instructions eval()
, par exemple, ou en appelant toString sur des fonctions).
SIMPLE_OPTIMIZATIONS
est le niveau de compilation par défaut.
ADVANCED_OPTIMIZATIONS
Le niveau de compilation ADVANCED_OPTIMIZATIONS
effectue les mêmes transformations que SIMPLE_OPTIMIZATIONS
, mais ajoute diverses transformations globales plus agressives pour obtenir la compression la plus élevée des trois niveaux. Le niveau ADVANCED_OPTIMIZATIONS
compresse bien JavaScript au-delà de ce qui est possible avec d'autres outils.
Pour activer cette compression extrême, ADVANCED_OPTIMIZATIONS
formule des hypothèses solides sur le code compilé. Si votre code ne respecte pas ces hypothèses, ADVANCED_OPTIMIZATIONS
génère un code qui ne s'exécute pas.
Par exemple, le code compilé avec ADVANCED_OPTIMIZATIONS
peut ne pas fonctionner avec du code non compilé, sauf si vous prenez des mesures spéciales pour garantir l'interopérabilité. Si vous ne signalez pas les fonctions et propriétés externes référencées dans votre code, Closure Compiler renomme les références de votre code de manière inappropriée, ce qui entraîne des incohérences entre les noms de votre code et ceux du code externe.
Pour en savoir plus sur la préparation de votre code pour ADVANCED_OPTIMIZATIONS
, consultez la section Compilation et exploration avancées.
Les transformations ADVANCED_OPTIMIZATIONS
incluent:
- renommage plus agressif :
La compilation avec
SIMPLE_OPTIMIZATIONS
ne renomme que les paramètres et les variables des fonctions.ADVANCED_OPTIMIZATIONS
renomme également les variables globales, les noms de fonctions et les propriétés. - suppression du code mort:
La compilation avec
ADVANCED_OPTIMIZATIONS
supprime le code qui est probablement inaccessible. Cela est particulièrement utile en association avec de grandes bibliothèques. Si vous n'utilisez que quelques fonctions d'un fichier de bibliothèque volumineux, le compilateur peut tout supprimer à l'exception de ces fonctions. - intégration globale :
La compilation avec
ADVANCED_OPTIMIZATIONS
remplace certains appels de fonction par le corps de la fonction. Cette transformation est appelée "intégration". Le compilateur n'intègre des fonctions que s'il détermine que l'intégration est sûre et qu'elle économise de l'espace. La compilation avecADVANCED_OPTIMIZATIONS
intègre également les constantes et certaines variables lorsque le compilateur détermine qu'il peut le faire de manière sécurisée.
Comment définir le niveau de compilation
L'UI du service Closure Compiler, l'API de service et l'application utilisent des méthodes différentes pour définir les compilation_level
.
Dans l'UI du service Closure Compiler
Pour définir le niveau de compilation dans l'UI du service Closure Compiler, sélectionnez les cases d'option dans la section Optimisation de l'interface.
Dans l'API du service Closure Compiler
Pour définir le niveau de compilation dans l'API du service Closure Compiler, incluez un paramètre de requête nommé compilation_level
avec la valeur WHITESPACE_ONLY
, SIMPLE_OPTIMIZATIONS
ou ADVANCED_OPTIMIZATIONS
, comme dans le programme Python suivant:
#!/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()
Dans l'application Closure Compiler
Pour définir le niveau de compilation dans l'application Closure Compiler, incluez l'option de ligne de commande --compilation_level
avec la valeur WHITESPACE_ONLY
, SIMPLE
ou ADVANCED
, comme dans la commande suivante:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js