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życiemADVANCED_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.
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