常見問題


什麼是封閉式編譯器?為什麼要使用?
Closure Compiler 工具可讓 JavaScript 的下載和執行速度更快。您可以使用 Closure Compiler 來縮減 JavaScript 檔案大小,並提升效率。
Closure Compiler 和市面上其他 JavaScript 壓縮工具有何不同?

一般而言,Closure Compiler 應符合或超過其他程式碼壓縮工具的壓縮,並縮短網頁應用程式的下載時間。此外,Closure Compiler 也可以協助您在開發期間 (而非測試期間) 找出語法錯誤,並找出潛在的錯誤程式碼模式。

在簡易模式下,Closure Compiler 的執行效果應該會比其他工具更好,因為這類工具會使用與編譯器類似的分析功能,尋找其他能縮減程式碼大小的方法。例如,Closure Compiler 可以內嵌在少數幾個情況下使用的內嵌函式、重複使用變數名稱,以及預先計算的常數運算式。

在進階模式下,Closure Compiler 也可以使用您新增的類型註解來找出難以解決的錯誤。

Closure Compiler 可以編譯內嵌在 HTML 中的 JavaScript 嗎?
不可以。Closure Compiler 僅適用於只包含 JavaScript 的檔案。
我可以將 Closure Compiler 與其他 JavaScript 壓縮工具搭配使用嗎?

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

提醒您,Closure Compiler 和其他壓縮工具對連入程式碼有可能設有期望。舉例來說,移除留言的壓縮工具可能會移除其他工具所需的授權或註解資訊。

如何針對 Closure Compiler 產生的 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 Compiler 嗎?
Closure Compiler 是 JavaScript 開發的工具,所以您必須瞭解如何以 JavaScript 編寫程式碼,才能使用編譯器。不過,所有使用 JavaScript 的使用者都能受惠於 Closure Compiler。
Closure Compiler 如何與 Closure Library 搭配使用?
Closure Compiler 針對使用 Closure Library 的程式碼提供特殊檢查和最佳化調整。此外,Closure Compiler 服務可自動納入 Closure Library 檔案。「圍繞著道路封閉」說明瞭宣告 Closure 所需的部分語法。如要瞭解如何搭配 API 使用 Closure Library,請參閱 API 參考資料。如要將 Closure Library 與 Closure Compiler 應用程式搭配使用,您必須先下載 Closure Library。根據預設,系統會在編譯器應用程式中啟用 Closure Library。
我的程式碼在我使用 ADVANCED_OPTIMIZATIONS 進行編譯時停止運作,或是編譯器產生錯誤。為什麼會這樣?
使用進階模式通常需要進行一些準備和程式碼變更。進階編譯和外部方法說明瞭如何確保您的程式碼能與 ADVANCED_OPTIMIZATIONS 搭配使用。
經過編譯的指令碼為什麼會有隨機的資訊提供?
Closure Compiler 會刻意每 500 個字元左右加上一次斷行。防火牆和 Proxy 有時會毀損或忽略很長的 JavaScript 檔案 (程式碼非常長)。每 500 個字元加入一次行即可避免這個問題。移除斷行不會影響指令碼的語意。對程式碼大小的影響較小,編譯器會最佳化換行符號的位置,使檔案壓縮時,程式碼的大小就會變小。
我的原始碼或開放原始碼授權文字必須顯示在我的原始碼中。如何避免 Closure Compiler 移除這段文字?
Closure Compiler 支援 JSDoc @license 標記。在任何 JSDoc 註解中新增 @license 標記,即可將註解保留在編譯器輸出中。詳情請參閱為 Closure Compiler 加上註解 JavaScript