Niveaux de compilation du compilateur de fermeture

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

Capture d'écran de l'interface utilisateur

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