您可能已經注意到包含所有已編譯 JavaScript 的 out
目錄。其中大約有 6 又 1/2 MB 的 JavaScript。這看起來可能很笨重,但幸運的是,ClojureScript 編譯器產生的輸出針對 Google Closure Compiler 進行了最佳化。Google Closure Compiler 執行許多最佳化,對於基於瀏覽器的客戶端而言,最重要的最佳化是縮小和無效程式碼消除。
讓我們從 src/hello_world/core.cljs
中移除我們之前所做的 REPL 修改
(ns hello-world.core)
(println "Hello world!")
我們可以透過設定 --optimizations
標誌的適當值來建立發行版本。預設最佳化等級為 none
,但這次我們希望使用 ClojureScript 和 Google Closure Compiler 提供的所有最佳化 - 這可以透過指定 advanced
來完成。--optimizations
的其他有效選項包括 whitespace
和 simple
,但這些較少使用
clj -M -m cljs.main --optimizations advanced -c hello-world.core
java -cp "cljs.jar;src" cljs.main --optimizations advanced -c hello-world.core
這個過程會花費更長的時間,這就是為什麼我們不使用這種編譯模式進行開發的原因。
檢查 out/main.js
,檔案大小應約為 90K。如果您將此檔案壓縮成 zip 檔案,您會看到它的大小約為 20K。這比 jQuery 相依性小得多,但使用 ClojureScript 時,您會隱式相依於整個 ClojureScript 標準函式庫 (10KLOC) 和 Google Closure 函式庫 (300KLOC)。您可以感謝無效程式碼消除。
您可以透過 --serve
標誌執行內建的簡單網頁伺服器來測試此檔案是否仍然有效
clj -M -m cljs.main --serve
java -cp "cljs.jar;src" cljs.main --serve
此命令不會啟動 REPL,因此不會自動開啟瀏覽器視窗。使用您最喜歡的瀏覽器導覽至 https://127.0.0.1:9000。檢查 JavaScript 主控台,您應該看到印出的 Hello world!
。內建的網頁伺服器會壓縮 JavaScript 內容。檢查您瀏覽器的 JavaScript 主控台網路標籤,您應該能夠確認總 JavaScript 負載現在約為 20K。