封閉式編譯器編譯等級

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 中設定編譯層級,請按一下介面「最佳化」區段中的圓形按鈕。

UI 螢幕截圖

在 Closure Compiler 服務 API 中

如要在 Closure Compiler 服務 API 中設定編譯層級,請納入名為 compilation_level、要求值為 WHITESPACE_ONLYSIMPLE_OPTIMIZATIONSADVANCED_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_ONLYSIMPLEADVANCED 值的指令列旗標 --compilation_level,如下列指令所示:

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