2024 Clojure调查问卷!中分享您的想法。

欢迎!请查看关于页面了解有关如何使用的更多信息。

0投票
ClojureScript

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

深入研究代码,看起来它在closure.clj中的{{optimize-modules}}函数中的函数发生了一个小的变化,我们可以在其中跳过emit所有源文件都未发生变化的模块。

7个答案

0投票

评论由:dvdreddy

您好,
我对社区的最佳实践不太确定,因此创建了一个JIRA,如果您希望我在谷歌群组中先进行初步讨论,我会将此事移至谷歌群组。

谢谢

0投票

评论由:thheller

仅当用于整个程序时,通过Closure Compiler编译的模块才可用。无法传入部分代码并从另一次编译运行中重新使用文件。否则编译器将注入冲突的goog/base.js以及其他东西。

然而,在不使用Closure Compiler的情况下合并输出是很容易的。只需将给定模块的所有来源代码连接到一个文件中,不做任何处理即可。遗憾的是,在CLJS中没有这种简单的钩子。

0投票

评论由:dvdreddy

(链接:~thheller) 我同意,我观察到的现象是生成的文件时间戳显示,并非Closure Compiler步骤花费时间,而是生成源映射花费时间,如果我们禁用源映射,则可以将时间缩短至大约5秒(开发过程中不能没有它们),观察生成cljs-base模块的js文件之后的js.map文件生成大约占用整体30秒编译时间中的15秒以上。这正是我想看看是否可以跳过的部分。

0投票

评论由:dvdreddy

(链接:~thheller) 对于上述内容有什么看法吗?

0投票

评论由:thheller

源映射不应该占用那么多的时间。你使用的硬件/操作系统是什么?你可能是写入到网络挂载的驱动器或其他类似东西吗?源映射可能会非常大,所以I/O可能会有点慢。

0投票

评论由:dvdreddy

这是一台普通的2013年Macbook pro,没有涉及到NAS。生成的源映射大小约为6MB,对于SSD来说不算大,让我看看是否能进行构建分析,然后给你提供一些更具体的瓶颈信息。

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