Kompilierungsebenen für Closure Compiler

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. Mit ADVANCED_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 mit ADVANCED_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