您可能已经注意到 out
目录,其中包含所有已编译的 JavaScript 代码。这里大约有 6.5 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。如果您压缩此文件,您会发现它约为 20K。这比 jQuery 依赖项小得多,但是当使用 ClojureScript 时,您隐式依赖于整个 ClojureScript 标准库 (10KLOC) 和 Google Closure 库 (300KLOC)。您可以感谢死代码消除。
您可以通过运行内置的简单 Web 服务器(通过 --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!
打印。内置 Web 服务器会压缩 JavaScript 内容。检查浏览器的 JavaScript 控制台网络选项卡,您应该能够确认总的 JavaScript 负载现在约为 20K。