Poziomy kompilacji kompilatora zamknięcia

Kompilacja Closure Compiler oferuje 3 poziomy kompilacji: od prostego usuwania spacji i komentarzy po agresywne przekształcenia kodu.

TYLKO SPACJE

Kompilacja poziomu WHITESPACE_ONLY usuwa komentarze z kodu oraz podziały wiersza, zbędne spacje, zbędne znaki interpunkcyjne (takie jak nawiasy i średniki) oraz inne spacje. JavaScript wyjściowy działa tak samo jak źródłowy kod JavaScript.

Transpilacja funkcji języka będzie nadal realizowana, gdy wybrany tryb języka wyjściowego będzie inny niż w trybie wprowadzania. Zobacz --language_in i --language_out w sekcji Flagi i opcje.

Ten poziom kompilacji zapewnia najmniejszą kompresję między 3 poziomami.

PROSTE_OPTYMALIZACJE

Poziom kompilacji SIMPLE_OPTIMIZATIONS pozwala uzyskać taką samą odstępy i usunięcie komentarza jak WHITESPACE_ONLY, ale pozwala też przeprowadzać optymalizacje w wyrażeniach i funkcjach, w tym zmieniać nazwy zmiennych lokalnych i parametry funkcji na krótsze nazwy. Zmiana nazw zmiennych na krótsze nazwy znacznie zmniejsza kod. Poziom SIMPLE_OPTIMIZATIONS zmienia nazwę tylko na symbole lokalne, które działają w funkcjach, więc nie zakłóca interakcji skompilowanego kodu JavaScript z innym kodem JavaScript.

Kompilacja z użyciem SIMPLE_OPTIMIZATIONS zawsze zachowuje funkcje o poprawnej składni JavaScript, pod warunkiem, że kod nie uzyskuje dostępu do zmiennych lokalnych za pomocą nazw ciągów (na przykład za pomocą instrukcji eval() lub przez wywołanie ToString w funkcjach).

SIMPLE_OPTIMIZATIONS to domyślny poziom kompilacji.

ZAAWANSOWANE_OPTYMALIZACJE

Poziom kompilacji kompilacji ADVANCED_OPTIMIZATIONS jest taki sam jak przekształcenie SIMPLE_OPTIMIZATIONS, ale powoduje dodanie różnych agresywniejszych przekształceń globalnych, by zapewnić największą kompresję na wszystkich 3 poziomach. Poziom ADVANCED_OPTIMIZATIONS kompresuje JavaScript znacznie bardziej niż jest to możliwe w innych narzędziach.

Aby umożliwić taką skompresowaną kompresję, ADVANCED_OPTIMIZATIONS przyjmuje mocne założenia dotyczące skompilowanego kodu. Jeśli kod nie jest zgodny z tymi założeniami, ADVANCED_OPTIMIZATIONS wygeneruje kod, który nie będzie działał.

Na przykład kod skompilowany za pomocą ADVANCED_OPTIMIZATIONS może nie działać z nieskompilowanym kodem, chyba że podejmiesz specjalne działania, aby zapewnić interoperacyjność. Jeśli nie oznaczysz funkcji zewnętrznych i właściwości, do których odwołuje się Twój kod, aplikacja Closure Compiler niewłaściwie zmieni nazwy odwołań w kodzie, powodując rozbieżności między nazwami w kodzie i kodzie zewnętrznym.

Aby dowiedzieć się, jak przygotować swój kod pod kątem reguły ADVANCED_OPTIMIZATIONS, przeczytaj artykuł Zaawansowane kompilacje i testy.

Przekształcenia ADVANCED_OPTIMIZATIONS obejmują:

  • bardziej agresywną zmianę nazwy:

    Kompilacja metody SIMPLE_OPTIMIZATIONS zmienia nazwy tylko parametrów i zmiennych w ramach funkcji. ADVANCED_OPTIMIZATIONS także zmienia nazwy zmiennych globalnych, nazw funkcji i właściwości.

  • usunięcie kodu martwego:

    Kompilacja metody ADVANCED_OPTIMIZATIONS usuwa kod, który jest wyraźnie nieosiągalny. Jest to szczególnie przydatne w połączeniu z dużymi bibliotekami. Jeśli używasz tylko kilku funkcji z dużego pliku biblioteki, kompilator może usunąć z wyjściowego menu wszystkie funkcje z tych funkcji.

  • wbudowane globalnie:

    Kompilacja metody ADVANCED_OPTIMIZATIONS zastępuje niektóre wywołania funkcji treścią strony. Przekształcanie jest nazywane „inline”. Kompilator wbudowany działa tylko wtedy, gdy ustali, że wbudowana funkcja jest bezpieczna i zaoszczędzi miejsce. Kompilacja z użyciem ADVANCED_OPTIMIZATIONS zawiera również wbudowane reguły i niektóre zmienne, gdy kompilator ustali, że może to zrobić bezpiecznie.

Jak ustawić poziom kompilacji

Interfejs usługi Closure Compiler, interfejs API usługi i aplikacja mają różne metody ustawiania właściwości compilation_level.

W interfejsie usługi Closure Compiler

Aby ustawić poziom kompilacji w interfejsie usługi Closure Compiler, kliknij przycisk w sekcji Optymalizacja w interfejsie.

Zrzut ekranu interfejsu

Interfejs API usługi Closure Compiler

Aby ustawić poziom kompilacji w interfejsie API usługi Closure Compiler, dodaj parametr żądania o nazwie compilation_level o wartości WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS lub ADVANCED_OPTIMIZATIONS, jak w tym programie w Pythonie:

#!/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()

W aplikacji kompozytora Closure

Aby ustawić poziom kompilacji w aplikacji Kompilacja Closure Compiler, dołącz flagę wiersza poleceń --compilation_level z wartością WHITESPACE_ONLY, SIMPLE lub ADVANCED, jak w tym poleceniu:

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