コンパイルされたJavaScriptを含む`out`ディレクトリに気づかれたかもしれません。そこに約6.5メガバイト分のJavaScriptがあります。これは扱いにくいように思えるかもしれませんが、幸いなことに、ClojureScriptコンパイラはGoogle Closure Compiler用に最適化された出力を生成します。Google Closure Compilerは多くの最適化を実行し、ブラウザベースのクライアントにとって最も重要なのは、ミニファイとデッドコードの削除です。
先に作成したREPLの変更を`src/hello_world/core.cljs`から削除しましょう。
(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`を確認してください。ファイルサイズは約90KBです。このファイルをzip圧縮すると、約20KBになります。これはjQueryの依存関係よりもはるかに小さいですが、ClojureScriptを使用すると、ClojureScript標準ライブラリ全体(10KLOC)とGoogle Closure Library(300KLOC)への暗黙的な依存関係があります。デッドコードの削除のおかげです。
`--serve`フラグを使用して、組み込みのシンプルなWebサーバーを実行して、このファイルがまだ機能することをテストできます。
clj -M -m cljs.main --serve
java -cp "cljs.jar;src" cljs.main --serve
このコマンドはREPLを開始しないため、ブラウザウィンドウは自動的に開きません。お好みのブラウザを使用して`https://:9000`にアクセスしてください。JavaScriptコンソールを確認すると、`Hello world!`と表示されているはずです。組み込みのWebサーバーはJavaScriptコンテンツをgzip圧縮します。ブラウザのJavaScriptコンソールのネットワークタブを確認すると、JavaScriptペイロードの合計が約20KBになっていることを確認できます。