Closure Compiler 可讓您從三種類別中進行編譯,包括移除空白字元和註解,以及積極編寫程式碼轉換等。
WHITESPACE_ONLY
WHITESPACE_ONLY
編譯層級會移除程式碼中的註解,並移除換行符號、多餘的空格和多餘的標點符號 (例如括號和分號),以及其他空格字元。輸出 JavaScript 的功能與來源 JavaScript 相同。
如果要求的輸出語言模式與輸入語言模式不同,系統仍會依語言轉譯語言。請參閱標記和選項中的 --language_in
和 --language_out
。
此編譯等級提供三個層級的壓縮效果最低。
SIMPLE_OPTIMIZATIONS
SIMPLE_OPTIMIZATIONS
編譯層級會執行與 WHITESPACE_ONLY
相同的空白字元和註解移除作業,但也會在運算式和函式中執行最佳化作業,包括將本機變數和函式參數重新命名為更短的名稱。將變數重新命名為較短的名稱,可大幅減少程式碼。由於 SIMPLE_OPTIMIZATIONS
層級只會重新命名位於函式本機上的符號,因此不會幹擾已編譯的 JavaScript 和其他 JavaScript 之間的互動。
使用 SIMPLE_OPTIMIZATIONS
進行編譯一律會保留語法有效 JavaScript 的功能,前提是程式碼不會使用字串名稱存取本機變數 (例如,使用 eval()
陳述式或透過函式呼叫 toString)。
SIMPLE_OPTIMIZATIONS
是預設的編譯層級。
ADVANCED_OPTIMIZATIONS
ADVANCED_OPTIMIZATIONS
編譯等級可執行與 SIMPLE_OPTIMIZATIONS
相同的轉換,但會新增更積極的全域轉換,以達到全部三個層級的最高壓縮率。ADVANCED_OPTIMIZATIONS
等級能夠大幅擴充 JavaScript,超越其他工具所能達到的效果。
若要啟用這種極端壓縮,ADVANCED_OPTIMIZATIONS
會對已編譯的程式碼做出強烈假設。如果程式碼不符合這些假設,ADVANCED_OPTIMIZATIONS
就會產生未執行的程式碼。
舉例來說,除非您採取特殊步驟來確保互通性,否則使用 ADVANCED_OPTIMIZATIONS
編譯的程式碼可能無法與未編譯的程式碼搭配使用。如果您未在程式碼中參照的外部函式和屬性,Closure Compiler 會在程式碼中以正確方式重新命名參照,導致程式碼與外部程式碼中的名稱不相符。
如要進一步瞭解如何為 ADVANCED_OPTIMIZATIONS
準備程式碼,請參閱進階編譯與外部。
ADVANCED_OPTIMIZATIONS
轉換包括:
- 更積極重新命名:
使用
SIMPLE_OPTIMIZATIONS
進行編譯時,只會重新命名函式中的參數和變數。ADVANCED_OPTIMIZATIONS
也會重新命名全域變數、函式名稱和屬性。 - 無效程式碼的移除作業:
使用
ADVANCED_OPTIMIZATIONS
進行編譯時,會移除系統無法存取的程式碼。此做法尤其適合搭配大型程式庫使用。如果您僅使用來自大型程式庫檔案的幾個函式,編譯器可以從輸出內容中移除所有內容以外的所有函式。 - 全域內嵌:
使用
ADVANCED_OPTIMIZATIONS
進行編譯後,某些函式呼叫會替換為函式的主體。這項轉換作業稱為「內嵌」。編譯器判定內嵌功能安全無虞並節省空間時,才會內嵌函式。當編譯器判定可安全執行時,使用ADVANCED_OPTIMIZATIONS
進行編譯也會內嵌常數和某些變數。
如何設定編譯層級
Closure Compiler 服務 UI、Service API 和應用程式都採用不同的 compilation_level
設定方法。
在 Closure Compiler 服務 UI 中
如要在 Closure Compiler 服務 UI 中設定編譯層級,請按一下介面「最佳化」區段中的圓形按鈕。
在 Closure Compiler 服務 API 中
如要在 Closure Compiler 服務 API 中設定編譯層級,請納入名為 compilation_level
、要求值為 WHITESPACE_ONLY
、SIMPLE_OPTIMIZATIONS
或 ADVANCED_OPTIMIZATIONS
的要求參數,如以下 Python 程式所示:
#!/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()
在 Closure Compiler 應用程式中
如要在 Closure Compiler 應用程式中設定編譯層級,請納入含有 WHITESPACE_ONLY
、SIMPLE
或 ADVANCED
值的指令列旗標 --compilation_level
,如下列指令所示:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js