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

欢迎!请参阅关于页面了解更多此工作的信息。

0
ClojureScript

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

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

7 答案

0

评论由:dvdreddy

你好,
我对社区关于问题最佳实践不太确定,因此创建了一个JIRA,如果您想让我在(链接:https://groups.google.com/forum/#!forum/clojurescript 文字:clojurescript)google小组中进行初步讨论,我将把这个帖子移动到google小组。

谢谢

0

评论者:thheller

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

然而,完全不使用Closure Compiler将输出合并在一起是很容易的。只需将给定模块的所有源代码连接到一个文件中,不进行任何处理。遗憾的是,在CLJS中没有为此提供的简单钩子。

0
作者:

评论由:dvdreddy

(链接:~thheller) 我同意,我观察到的,文件生成的日期戳表明, Closure Compiler 并不是耗时步骤,而是生成源映射,如果我们禁用源映射,我们可以将时间减少到约5秒(开发期间不能没有它们)而且观察编译js文件生成的cljs-base模块生成的js.map文件,整个过程耗时约15秒占整体30秒编译时间的超过。这就是我想要查看是否可以跳过的部分。

0
作者:

评论由:dvdreddy

(链接:~thheller) 对上面的评论有意见吗?

0
作者:

评论者:thheller

源映射不应该花这么长时间。你使用的是什么硬件/操作系统?你是不是可能正在向网络映射的驱动器写入或类似的东西?源映射可能非常大,因此可能非常慢的I/O?

0
作者:

评论由:dvdreddy

这是一台普通的2013年Macbook pro,没有涉及NAS。生成的源映射大小约为6MB,对于SSD来说不算很大,让我看看是否可以分析构建以获得更具体的瓶颈信息。

0
作者:
参考:[https://clojure.atlassian.net/browse/CLJS-2481](https://clojure.atlassian.net/browse/CLJS-2481)(由alex+import报告)
...