Compiler-Kompilierungsebenen schließen

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

Screenshot der Benutzeroberfläche

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