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

欢迎!请参阅关于页面了解更多关于此页面如何工作的情况。

0投票
ClojureScript

我正在尝试提高我的自动构建时间,因为我们无法使用 (它是一个Chrome扩展程序,chrome的安全策略禁止对注入到网页中的JS进行动态加载)。所以当使用下一个最快的优化时,耗时很多(~30秒即使是小的更改)因为应用程序引入了很多依赖项。我试图使用新发布的模块功能将输出分为两个文件,一个包含所有依赖项,另一个包含我的代码,并观察到ClojureScript编译器不会跳过重新生成所有源文件都没有发生变化的确认模块。

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

7 个答案

0投票

评论由:dvdreddy

您好,
我不确定关于社区的最佳实践,因此创建了一个JIRA,如果您想在(cljurescript: https://groups.google.com/forum/#!forum/clojurescript) Google群组中进行初步讨论,我会将此移动到Google群组。

谢谢

0投票

评论由:thheller

:只有在整个程序中使用时,通过Closure编译器编译的模块才有效。无法输入部分代码并重新使用其他编译运行中的文件。否则,编译器将注入冲突的goog/base.js和其他可能的东西。

然而,在没有使用Closure编译器的情况下组合输出是很容易的。只需将给定模块中的所有源文件连接到单个文件中,而不进行任何处理。不幸的是,CLJS中没有为此提供简单的钩子。

0投票

评论由:dvdreddy

(链接:~thheller)是的,我同意,我观察到的是文件生成的时间戳,Closure编译器并不是耗时的一步,而是生成源映射的过程,如果我们禁用源映射,我们可以将时间缩短到约5秒(开发过程中不能没有它们),观察在js文件生成后,cljs-base模块生成的js.map文件生成耗去了整个30秒编译时间中的约15秒。这部分是我想要查看是否可以跳过的。

0投票

评论由:dvdreddy

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

0投票

评论由:thheller

源映射不应该占用那么多时间。你的硬件/操作系统是什么?你是否可能在写入网络mounted磁盘或类似的东西?源映射可能相当大,所以它可能很慢的IO?

0投票

评论由:dvdreddy

这是一台普通的2013款Macbook pro,没有NAS的参与。生成的源映射大小大约6MB,对于一个SSD来说不算大,让我看看是否能进行剖面分析以获取更具体的信息。

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