当构建使用 {{cljs.js}} 命名空间的 cljs 源码时,生成的最终 js 文件非常大:6.4M。如维基百科中所述:[https://github.com/clojure/clojurescript/wiki/Optional-Self-hosting](https://github.com/clojure/clojurescript/wiki/Optional-Self-hosting),它主要由 {{cljs.core}} 命名空间的分析缓存组成。作为解决方案,维基百科文章建议将缓存导出到单独的文件中,并在运行时加载,而不是将其打包到 js 二进制文件中。我认为可以在不要求用户做额外工作的情况下进行优化,同时也能优化 js 文件的大小。这个想法是将缓存以原始的 clojure 数据结构的形式导出,而不是序列化为字符串。这样,编译器就不会将缓存编译成 js(增加了很多代码),而是将其留下为字符串。在运行时,这个字符串将使用 {{tools.reader}} 解析回 clojure。
以下是提议:[https://gist.github.com/nbeloglazov/0bf163fb62fa4b61d446](https://gist.github.com/nbeloglazov/0bf163fb62fa4b61d446)
本地检查表明,将 js 文件的大小从 6.4M 减少到 2.7M,我觉得非常好。缺点是,现在 js 在运行时需要做更多的工作(解析大型字符串),而今天它只是简单地读取 js 代码并执行它。但我认为这不是一个大问题。如果需要保留所有行为,可以为 {{:dump-core}} 编译器设置添加一个新选项,类似于 {{:dump-core :string}},该选项启用缓存的字符串序列化。
这听起来合理吗?