在构建使用 {{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}},它启用缓存的字符串序列化。
这听起来合理吗?