- 什麼是封閉式編譯器?為什麼要使用?
- Closure Compiler 和市面上其他 JavaScript 壓縮工具有何不同?
- Closure Compiler 是否能夠編譯內嵌在 HTML 中的 JavaScript?
- 我可以將 Closure Compiler 與其他 JavaScript 壓縮工具搭配使用嗎?
- 我要如何針對 Closure Compiler 產生的 JavaScript 進行偵錯?
- 編譯器是否會對應用程式的執行速度和下載程式碼大小進行取捨?
- 編譯器是否針對速度進行最佳化調整?
- 可編譯的檔案大小是否有任何限制?
- 封閉式編譯器是否適用於所有平台?
- 編譯器可以處理任何法律 JavaScript 嗎?
- Closure Compiler 如何與 Closure Library 搭配使用?
-
我的程式碼在我使用
ADVANCED_OPTIMIZATIONS
進行編譯時,無法正常運作,或是編譯器產生錯誤。為什麼會這樣想? - 經過編譯的指令碼為什麼會有隨機的資訊提供?
- 我的原始碼或開放原始碼授權文字必須顯示在我的原始碼中。如何避免 Closure Compiler 移除這段文字?
- 什麼是封閉式編譯器?為什麼要使用?
- Closure Compiler 工具可讓 JavaScript 的下載和執行速度更快。您可以使用 Closure Compiler 來縮減 JavaScript 檔案大小,並提升效率。
- Closure Compiler 和市面上其他 JavaScript 壓縮工具有何不同?
-
一般而言,Closure Compiler 應符合或超過其他程式碼壓縮工具的壓縮,並縮短網頁應用程式的下載時間。此外,Closure Compiler 也可以協助您在開發期間 (而非測試期間) 找出語法錯誤,並找出潛在的錯誤程式碼模式。
在簡易模式下,Closure Compiler 的執行效果應該會比其他工具更好,因為這類工具會使用與編譯器類似的分析功能,尋找其他能縮減程式碼大小的方法。例如,Closure Compiler 可以內嵌在少數幾個情況下使用的內嵌函式、重複使用變數名稱,以及預先計算的常數運算式。
在進階模式下,Closure Compiler 也可以使用您新增的類型註解來找出難以解決的錯誤。
- 不可以。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。