Mit dem Closure Compiler können Sie aus drei Ebenen der Kompilierung wählen, von der einfachen Entfernung von Leerräumen und Kommentaren bis hin zu aggressiven Codetransformationen.
Nur WHITESPACE_
Die Kompilierungsebene WHITESPACE_ONLY
entfernt Kommentare aus Ihrem Code und entfernt außerdem Zeilenumbrüche, unnötige Leerzeichen, überflüssige Satzzeichen (z. B. Klammern und Semikolons) und andere Leerzeichen. Der JavaScript-Ausgabecode ist funktional mit dem Quell-JavaScript identisch.
Die Umwandlung von Sprachfunktionen findet weiterhin statt, wenn sich der angeforderte Ausgabesprachmodus vom Eingabesprachmodus unterscheidet.
Weitere Informationen finden Sie unter --language_in
und --language_out
unter Flags und Optionen.
Diese Kompilierungsstufe bietet die geringste Komprimierung der drei Ebenen.
SIMPLE_OPTIMIZATIONEN
Die Kompilierungsebene SIMPLE_OPTIMIZATIONS
führt den gleichen Leerraum und die gleiche Kommentarentfernung wie WHITESPACE_ONLY
aus, optimiert aber auch die Ausdrücke und Funktionen, einschließlich der Umbenennung lokaler Variablen und Funktionsparameter in kürzere Namen. Durch das Umbenennen von Variablen in kürzere Namen wird der Code erheblich kleiner. Da auf der Ebene SIMPLE_OPTIMIZATIONS
nur Symbole umbenannt werden, die für Funktionen lokal sind, beeinträchtigt sie nicht die Interaktion zwischen dem kompilierten JavaScript und anderem JavaScript.
Bei der Kompilierung mit SIMPLE_OPTIMIZATIONS
wird immer die Funktionalität von syntaktisch gültigem JavaScript beibehalten, sofern der Code nicht über Stringnamen auf lokale Variablen zugreift (z. B. durch eval()
-Anweisungen oder durch Aufrufen von „toString“ für Funktionen).
SIMPLE_OPTIMIZATIONS
ist die standardmäßige Kompilierungsebene.
ADVANCED_OPTIMIZATIONEN
Die Kompilierungsebene ADVANCED_OPTIMIZATIONS
führt dieselben Transformationen wie SIMPLE_OPTIMIZATIONS
aus, fügt jedoch eine Reihe von aggressiveren globalen Transformationen hinzu, um die höchste Komprimierung aller drei Ebenen zu erreichen. Die Ebene ADVANCED_OPTIMIZATIONS
komprimiert JavaScript weit über das hinaus, was mit anderen Tools möglich ist.
Um diese extreme Komprimierung zu aktivieren, setzt ADVANCED_OPTIMIZATIONS
starke Annahmen über den kompilierten Code. Wenn Ihr Code diesen Annahmen nicht entspricht, generiert ADVANCED_OPTIMIZATIONS
Code, der nicht ausgeführt wird.
Beispielsweise kann mit ADVANCED_OPTIMIZATIONS
kompilierter Code möglicherweise nicht mit unkompiliertem Code funktionieren, sofern Sie keine besonderen Schritte zur Interoperabilität ausführen. Wenn Sie externe Funktionen und Attribute, die in Ihrem Code referenziert sind, nicht kennzeichnen, benennt Closure Compiler Verweise in Ihrem Code falsch um. Dies führt zu Abweichungen bei den Namen in Ihrem Code und im externen Code.
Weitere Informationen zur Vorbereitung Ihres Codes für ADVANCED_OPTIMIZATIONS
finden Sie unter Erweiterte Kompilierung und externe Verbindungen.
Die ADVANCED_OPTIMIZATIONS
-Transformationen umfassen:
- aggressivere Umbenennung:
Bei der Kompilierung mit
SIMPLE_OPTIMIZATIONS
werden nur Parameter und Variablen innerhalb von Funktionen umbenannt.ADVANCED_OPTIMIZATIONS
benennt auch globale Variablen, Funktionsnamen und Attribute um. - Dead-Code-Entfernung:
Beim Kompilieren mit
ADVANCED_OPTIMIZATIONS
wird Code entfernt, der nachweislich nicht erreichbar ist. Dies ist insbesondere in Kombination mit großen Bibliotheken nützlich. Wenn Sie nur wenige Funktionen aus einer großen Bibliotheksdatei verwenden, kann der Compiler alles außer diesen Funktionen aus der Ausgabe entfernen. - globale Inlining:
Bei der Kompilierung mit
ADVANCED_OPTIMIZATIONS
werden einige Funktionsaufrufe durch den Text der Funktion ersetzt. Diese Transformation wird als „Inlining“ bezeichnet. Der Compiler führt Funktionen nur dann ein, wenn sie sicher sind, dass Inlining sicher ist und Platz spart. Bei der Kompilierung mitADVANCED_OPTIMIZATIONS
werden auch Konstanten und einige Variablen inline eingefügt, wenn der Compiler feststellt, dass dies sicher geschehen kann.
Zusammensetzungsstufe festlegen
Die Dienst-UI von Closure Compiler, die Service API und die Anwendung haben unterschiedliche Methoden zum Festlegen von compilation_level
.
In der UI des Compiler-Diensts
Klicken Sie im Abschnitt Optimierung der Benutzeroberfläche auf die Optionsfelder, um die Kompilierungsebene in der UI des Compiler-Diensts festzulegen.
In der Closure Compiler Service API
Fügen Sie wie im folgenden Python-Programm einen Anfrageparameter namens compilation_level
mit dem Wert WHITESPACE_ONLY
, SIMPLE_OPTIMIZATIONS
oder ADVANCED_OPTIMIZATIONS
ein, um die Kompilierungsebene in der Closure Compiler Service API festzulegen:
#!/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()
In der Closure-Compiler App
Zum Festlegen der Kompilierungsebene in der Closure-Compiler-Anwendung fügen Sie das Befehlszeilen-Flag --compilation_level
mit dem Wert WHITESPACE_ONLY
, SIMPLE
oder ADVANCED
wie im folgenden Befehl ein:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js