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

欢迎!请参阅关于页面以获取更多关于此操作的信息。

0
ClojureScript

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

深入代码中,它看起来是closure.clj中的{{optimize-modules}}函数中的一个较小修改,我们可以跳过接收所有源文件都未更改的模块。

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文件生成大约占整体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 报告)]
...