2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面了解有关此信息。

0
ClojureScript

我正在尝试提高我所用例的自动构建时间,在这种情况下我们不能使用 }(它是一个Chrome扩展程序,Chrome的安全策略禁止注入网页的JS动态加载)。因此,当使用下一个最快的优化 }时,它花费了很多时间 (~30秒,即使是小更改),因为应用程序拉入了大量的依赖项。我尝试使用新发布的模块功能将输出拆分为两个文件:一个包含所有依赖项,另一个包含我的代码,并观察到ClojureScript编译器不会跳过那些源文件完全没有改变的模块的重新生成。

深入代码,看起来这是在{{optimize-modules}}函数中的closure.clj文件中的一个函数中进行的微小更改,我们可以跳过不进行任何源代码改变的模块的生成。

7 个答案

0

评论者:dvdreddy

嗨,
我不确定社区在问题方面有哪些最佳实践,因此创建了一个JIRA,如果您想我在(链接:https://groups.google.com/forum/#!forum/clojurescript)google group中进行初步讨论,我将将其移至google group。

谢谢

0

评论者:thheller

使用Closure编译器进行模块编译仅在针对整个程序使用时才有效果。无法输入部分代码并重用其他编译运行中的文件。否则,编译器将会注入冲突的goog/base.js以及可能是其他的一些内容。

然而,不使用Closure编译器,合并输出是很容易实现的。只需将给定模块的所有源文件连接成一个单独的文件,无需任何处理即可。不幸的是,在CLJS中没有为这部分提供简单的钩子。

0

评论者:dvdreddy

(链接: ~thheller) 我同意,我观察到的,从文件生成的时间戳看,Closure编译器并不是耗时最大的步骤,而是在生成source-mappings时,如果我们禁用source-mappings,可以将时间缩短到大约5秒(开发期间不能没有它们),并且在js文件生成后,观察 cljs-base 模块生成的js.map文件大约需要15秒,整个30秒编译时间中占比超过15秒。我就是要看看这部分是否可以跳过。

0

评论者:dvdreddy

(链接: ~thheller) 对上述内容有什么意见吗?

0

评论者:thheller

Source maps不应该是那么多的时间。你使用的硬件/操作系统是什么?你是否正在写入网络挂载的驱动器或其他类似的东西?由于source maps可能相当大,因此I/O可能很慢?

0

评论者:dvdreddy

这是一个普通的2013款MacBook Pro,没有使用NAS。生成的source map大小约为6MB,对于SSD来说不是太大,让我看看能否分析构建过程,并给你一些更具体的关于瓶颈的信息。

0
参考资料: https://clojure.atlassian.net/browse/CLJS-2481 (由alex+import报告)
...