常見問題


什麼是 Closure 編譯器?為什麼要使用這項功能?
Closure 編譯器可加快 JavaScript 的下載和執行速度。您可以使用 Closure Compiler 縮減 JavaScript 檔案大小,並提升效率。
Closure 編譯器與其他 JavaScript 壓縮器有何不同?

一般來說,Closure Compiler 應可達到或超過其他程式碼縮減工具的壓縮率,並縮短網頁應用程式的下載時間。此外,Closure 編譯器還可協助您在開發期間 (而非測試期間) 找出語法錯誤,並找出可能含有錯誤的程式碼模式。

在「簡單」模式下,Closure Compiler 應能比其他工具做得更好,因為它會使用類似編譯器的分析方式,找出其他可縮減程式碼大小的方法。舉例來說,Closure Compiler 可以內嵌只在少數情況下使用的函式、重複使用變數名稱,以及預先計算常數運算式。

在進階模式中,Closure Compiler 也可以使用您新增的型別註解,找出難以發現的錯誤。

Closure Compiler 可以編譯嵌入在 HTML 中的 JavaScript 嗎?
否。Closure 編譯器只能處理僅含 JavaScript 的檔案。
我可以將 Closure 編譯器與其他 JavaScript 縮小器搭配使用嗎?

可以。Closure Compiler 會讀取任何有效的 JavaScript,並產生有效的 JavaScript,因此您可以在透過其他縮小器執行 JavaScript 檔案前後,將 Closure Compiler 套用至 JavaScript 檔案。

請注意,Closure 編譯器和其他壓縮工具可能會對傳入的程式碼有預期行為。如果縮小工具會移除註解,可能會一併移除其他工具所需的授權或註解資訊。

如何對 Closure 編譯器產生的 JavaScript 進行偵錯?
如果編譯後的程式碼會擲回錯誤或出現非預期行為,您可以使用來源對應來偵錯問題。來源對應會在編譯後的程式碼和原始碼之間建立對應,讓瀏覽器的開發人員工具顯示原始碼,而非編譯後的程式碼。如要讓 Closure Compiler 產生來源對應,請在指令列中傳遞 --create_source_map 標記。例如:
$ java -jar compiler.jar --js example.js --create_source_map ./example-map --js_output_file example-compiled.js
接著,如果您使用支援來源對應的瀏覽器 (例如 Chrome 或 Firefox),可以像設定未編譯程式碼的中斷點一樣設定中斷點,瀏覽器的開發人員工具會顯示原始來源中對應的程式碼行。如要進一步瞭解 Chrome 開發人員工具,包括來源對應資訊,請參閱「偵錯 JavaScript」。
編譯器是否會在應用程式的執行速度和下載程式碼大小之間做出取捨?
可以。任何最佳化編譯器都會做出取捨。部分大小最佳化作業會造成些微速度負擔。不過,Closure Compiler 的開發人員已謹慎避免導入大量額外執行階段。編譯器的一些最佳化功能甚至會縮短執行階段 (請參閱下一個問題)。
編譯器是否會進行速度最佳化?
在大多數情況下,程式碼越小,速度就越快,因為在網頁應用程式中,下載時間通常是最重要的速度因素。減少多餘內容的最佳化作業也能加快程式碼的執行時間。
編譯的檔案大小是否有限制?
編譯網路服務有檔案大小上限,但獨立編譯器應用程式沒有。
Closure Compiler 是否適用於所有平台?
編譯器是以 Java 撰寫,因此可在任何執行 Java 的位置執行。
編譯器可以處理任何合法的 JavaScript 嗎?
多數情況都是如此。部分 JavaScript 建構 (包括 eval()with()) 可能會使編譯器轉換所依據的假設失效。
使用 Closure 編譯器需要多少網頁開發知識?
Closure 編譯器是 JavaScript 開發工具,因此您必須瞭解如何使用 JavaScript 程式設計,才能使用這個編譯器。不過,只要使用 JavaScript,就能從 Closure 編譯器獲益。
Closure Compiler 如何與 Closure Library 搭配運作?
Closure 編譯器會對使用 Closure 程式庫的程式碼進行特殊檢查和最佳化。此外,Closure Compiler 服務可以自動納入 Closure Library 檔案。尋找 Closure 的使用方式:說明如何宣告您需要的 Closure 部分。如要瞭解如何搭配使用 Closure 程式庫與 API,請參閱 API 參考資料。如要搭配使用 Closure Compiler 應用程式和 Closure Library,請先下載 Closure Library。編譯器應用程式預設會啟用 Closure 程式庫支援功能。
使用 ADVANCED_OPTIMIZATIONS 編譯時,我的程式碼停止運作或編譯器產生錯誤。為什麼?
使用進階模式通常需要進行一些準備工作,並變更程式碼。進階編譯和外部函式說明如何確保程式碼可與 ADVANCED_OPTIMIZATIONS 搭配運作。
為什麼編譯後的指令碼會隨機換行?
Closure 編譯器會刻意每隔 500 個字元左右就加入換行符。防火牆和 Proxy 有時會損毀或忽略含有極長行的 JavaScript 大型檔案。每 500 個半形字元就加入換行符,即可避免這個問題。移除換行符不會影響指令碼的語意。對程式碼大小的影響不大,而且編譯器會最佳化換行符位置,因此檔案經過 gzip 壓縮後,程式碼大小的影響會更小。
我的原始碼中必須顯示著作權聲明或開放原始碼授權文字。如何避免 Closure Compiler 移除這段文字?
Closure Compiler 支援 JSDoc @license 標記。在任何 JSDoc 註解中新增 @license 標記,即可在編譯器輸出內容中保留註解。詳情請參閱「為 Closure 編譯器註解 JavaScript」。