Mit dem Closure Compiler können Sie zwischen drei Kompilierungsebenen wählen, die von der einfachen Entfernung von Leerzeichen und Kommentaren bis hin zu aggressiven Code-Transformationen reichen.
WHITESPACE_ONLY
Bei der Kompilierungsstufe WHITESPACE_ONLY
werden Kommentare aus Ihrem Code entfernt. Außerdem werden Zeilenumbrüche, unnötige Leerzeichen, überflüssige Satzzeichen (z. B. Klammern und Semikolons) und andere Leerzeichen entfernt. Das ausgegebene JavaScript ist funktional identisch mit dem Quell-JavaScript.
Die Transpilierung von Sprachfunktionen erfolgt weiterhin, wenn sich der angeforderte Ausgabesprachenmodus vom Eingabesprachenmodus unterscheidet.
Weitere Informationen finden Sie unter --language_in
und --language_out
im Abschnitt Flags und Optionen.
Diese Kompilierungsstufe bietet die geringste Komprimierung der drei Stufen.
SIMPLE_OPTIMIZATIONS
Bei der Kompilierungsebene SIMPLE_OPTIMIZATIONS
werden dieselben Leerzeichen und Kommentare entfernt wie bei WHITESPACE_ONLY
. Außerdem werden Ausdrücke und Funktionen optimiert, z. B. durch Umbenennen lokaler Variablen und Funktionsparameter in kürzere Namen. Durch Umbenennen von Variablen in kürzere Namen wird der Code deutlich kleiner. Da auf der Ebene SIMPLE_OPTIMIZATIONS
nur Symbole umbenannt werden, die für Funktionen lokal sind, wird die Interaktion zwischen dem kompilierten JavaScript und anderem JavaScript nicht beeinträchtigt.
Bei der Kompilierung mit SIMPLE_OPTIMIZATIONS
bleibt die Funktionalität von syntaktisch gültigem JavaScript immer erhalten, sofern im Code nicht über String-Namen auf lokale Variablen zugegriffen wird (z. B. durch Verwendung von eval()
-Anweisungen oder durch Aufrufen von toString für Funktionen).
SIMPLE_OPTIMIZATIONS
ist die Standardkompilierungsstufe.
ADVANCED_OPTIMIZATIONS
Bei der Kompilierungsebene ADVANCED_OPTIMIZATIONS
werden dieselben Transformationen wie bei SIMPLE_OPTIMIZATIONS
ausgeführt. Zusätzlich werden jedoch eine Reihe aggressiverer globaler Transformationen angewendet, um die höchste Komprimierung aller drei Ebenen zu erreichen. Auf der ADVANCED_OPTIMIZATIONS
-Ebene wird JavaScript viel stärker komprimiert als mit anderen Tools.
Um diese extreme Komprimierung zu ermöglichen, trifft ADVANCED_OPTIMIZATIONS
starke Annahmen über den kompilierten Code. Wenn Ihr Code nicht diesen Annahmen entspricht, generiert ADVANCED_OPTIMIZATIONS
Code, der nicht ausgeführt wird.
Beispielsweise funktioniert mit ADVANCED_OPTIMIZATIONS
kompilierter Code möglicherweise nicht mit nicht kompiliertem Code, wenn Sie keine besonderen Maßnahmen ergreifen, um die Interoperabilität zu gewährleisten. Wenn Sie in Ihrem Code referenzierte externe Funktionen und Eigenschaften nicht kennzeichnen, benennt Closure Compiler Referenzen in Ihrem Code unangemessen um. Dies führt zu Abweichungen zwischen 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 Externs.
Die ADVANCED_OPTIMIZATIONS
-Transformationen umfassen:
- Aggressivere Umbenennung:
Bei der Kompilierung mit
SIMPLE_OPTIMIZATIONS
werden nur Parameter und Variablen innerhalb von Funktionen umbenannt. MitADVANCED_OPTIMIZATIONS
werden auch globale Variablen, Funktionsnamen und Attribute umbenannt. - Entfernen von nicht verwendetem Code:
Bei der Kompilierung mit
ADVANCED_OPTIMIZATIONS
wird Code entfernt, der nachweislich nicht erreichbar ist. Das ist besonders 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 seiner Ausgabe entfernen. - Globales Inlining:
Bei der Kompilierung mit
ADVANCED_OPTIMIZATIONS
werden einige Funktionsaufrufe durch den Funktionskörper ersetzt. Diese Transformation wird als „Inlining“ bezeichnet. Der Compiler inline nur Funktionen, wenn er feststellt, dass das Inlining sicher ist und Speicherplatz spart. Bei der Kompilierung mitADVANCED_OPTIMIZATIONS
werden auch Konstanten und einige Variablen inline eingefügt, wenn der Compiler feststellt, dass dies sicher möglich ist.
Kompilierungsebene festlegen
Wenn Sie die Kompilierungsebene in der Closure Compiler-Anwendung festlegen möchten, fügen Sie das Befehlszeilen-Flag --compilation_level
mit dem Wert WHITESPACE_ONLY
, SIMPLE
oder ADVANCED
ein, wie im folgenden Befehl:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js