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编译的 modules 才会工作。无法输入部分代码并复用其他编译过程中的文件。否则编译器将注入冲突的 goog/base.js 以及其他可能的内容。

然而,在没有使用 Closure Compiler 的情况下组合输出是很容易的。只需将给定模块中的所有源文件连接到一个单一的文件中,没有任何处理。不幸的是,在 CLJS 中没有任何容易的方式来实现这一点。

0

评论者:dvdreddy

(链接:~thheller) 同意,我所观察到的,文件的生成时间戳显示,不是Closure Compiler造成时间消耗,而是生成源映射,如果我们禁用源映射,可以将时间缩短至约5秒(开发过程中不能没有它们),观察生成 cljs-base 模块的 js.map 文件所用的时间,生成 js.map 文件花费了整体 30 秒编译时间的约 15 秒以上。这就是我希望能够跳过的部分。

0

评论者:dvdreddy

(链接:~thheller) 对上面的评论有何看法?

0

由:thheller 评论

源映射不应该占用那么多的时间。您使用的是什么硬件/操作系统?您是否可能正在写入网络挂载的驱动器或其他类似的东西?源映射可以很大,可能会造成IO变慢?

0

评论者:dvdreddy

这是一台普通的 2013 Macbook pro,没有使用 NAS。生成的源映射大小约为 6MB,对于SSD来说并不算大,让我看看能否分析一个构建并给您提供更具体的瓶颈信息。

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