如何加速使用“:reload”的Clojure程序?

3

我正在开发一个Clojure程序,并且我使用

(:use modulename :reload)

问题出现在大约100个clj文件中,导致整个系统变得越来越慢。是否还有其他人遇到过这个问题?如果是,你们是如何解决的?

1个回答

9
解决方案很简单:不要在你的ns表单中使用:reload。这样做是错的,十次有九次是错误的:reload是为REPL使用而设计的,而不是用于命名空间声明。如果命名空间foo如何知道命名空间bar已经加载并需要重新加载以使foo正常工作?如果你的设置真的如此复杂,这样做才有意义,那么你可能有比启动时间更大的问题。

谢谢您的反馈。我发现每次更改都需要在REPL中输入(使用namespace:reload)变得很痛苦。您是如何处理这个问题的? - yazzapps.com
3
我不会在REPL中写“use/require”命令。我只会使用swank让emacs来处理所有重活:按下 C-c C-k 可以重新加载当前缓冲区及其所有依赖项。 - amalloy
所以你的意思是仍然需要在后台重新加载所有东西,是吗? - yazzapps.com
1
是和否,我想是这样的。C-c C-k 排列以仅重新加载自上次加载以来发生更改的那些命名空间。它是如何做到的,我不知道;也许(use [foo :reload])做了同样的事情。但是,在源文件中放置这个是疯狂的。您不希望每次启动应用程序时都加载一打命名空间;只有在开发过程中更改内容时才需要加载。 - amalloy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接