Niveaux de compilation Closure Compiler

Le Closure Compiler vous permet de choisir parmi trois niveaux de compilation, allant de la simple suppression des espaces et des commentaires aux transformations agressives du code.

WHITESPACE_ONLY

Le niveau de compilation WHITESPACE_ONLY supprime les commentaires de votre code, ainsi que les sauts de ligne, les espaces inutiles, la ponctuation superflue (telle que les parenthèses et les points-virgules) et les autres espaces. Le JavaScript de sortie est fonctionnellement identique au JavaScript source.

La transpilation des fonctionnalités linguistiques se produira toujours si le mode de langue de sortie demandé est différent de celui de la langue d'entrée. Consultez --language_in et --language_out dans Indicateurs et options.

Ce niveau de compilation offre la compression la plus faible des trois niveaux.

SIMPLE_OPTIMIZATIONS

Le niveau de compilation SIMPLE_OPTIMIZATIONS effectue la même suppression des espaces blancs et des commentaires que WHITESPACE_ONLY, mais il effectue également des optimisations dans les expressions et les fonctions, y compris en renommant les variables locales et les paramètres de fonction avec des noms plus courts. Renommer les variables avec des noms plus courts permet de réduire considérablement la taille du 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 les autres codes JavaScript.

La compilation avec SIMPLE_OPTIMIZATIONS préserve toujours la fonctionnalité du code JavaScript syntaxiquement valide, à condition que le code n'accède pas aux variables locales à l'aide de noms de chaînes (en utilisant des instructions eval(), par exemple, ou en appelant toString sur les 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 le code JavaScript bien au-delà de ce qui est possible avec d'autres outils.

Pour activer cette compression extrême, ADVANCED_OPTIMIZATIONS fait des hypothèses fortes sur le code compilé. Si votre code ne respecte pas ces hypothèses, ADVANCED_OPTIMIZATIONS générera un code qui ne s'exécutera pas.

Par exemple, le code compilé avec ADVANCED_OPTIMIZATIONS peut ne pas fonctionner avec le code non compilé, sauf si vous prenez des mesures spécifiques pour assurer l'interopérabilité. Si vous ne signalez pas les fonctions et propriétés externes référencées dans votre code, Closure Compiler renommera de manière inappropriée les références dans votre code, ce qui entraînera des incohérences entre les noms dans votre code et dans le code externe.

Pour savoir comment préparer votre code pour ADVANCED_OPTIMIZATIONS, consultez Compilation avancée et externs.

Les transformations ADVANCED_OPTIMIZATIONS incluent les suivantes :

  • Renommage plus agressif :

    La compilation avec SIMPLE_OPTIMIZATIONS renomme uniquement les paramètres et les variables dans les 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 manifestement inaccessible. Cela est particulièrement utile en combinaison avec de grandes bibliothèques. Si vous n'utilisez que quelques fonctions d'un fichier de bibliothèque volumineux, le compilateur peut supprimer tout le reste de sa sortie.

  • Inlining global :

    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'insère les fonctions que lorsqu'il détermine que l'insertion est sûre et permet de gagner de l'espace. La compilation avec ADVANCED_OPTIMIZATIONS inclut également les constantes et certaines variables lorsque le compilateur détermine qu'il peut le faire en toute sécurité.

Définir le niveau de compilation

Pour définir le niveau de compilation dans l'application Closure Compiler, incluez l'option de ligne de commande --compilation_level avec une valeur de WHITESPACE_ONLY, SIMPLE ou ADVANCED, comme dans la commande suivante :

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js