我使用lein repl
在控制台中执行clojure repl。
当我运行它时,超过15秒。
当我运行java -cp clojure-1.6.0.jar clojure.main
时,只需几秒钟。
为什么lein repl
这么慢?反正有没有让它更快?
我的环境:
答案 0 :(得分:10)
Leiningen启动了两个JVM,并将它们连接在一起。它需要加载额外的东西才能做到这一点。您键入的提示与评估代码的Clojure流程不同。 Leiningen还必须解析您的项目文件并确保所有内容都按照需要进行设置,或者如果您的maven配置目录中缺少任何内容,则可以从Web获取所需内容。在Leiningen sample project file中,有一些选项可以加快一些事情,如果你仔细阅读它。我认为Leiningen创业缓慢只是现在生活中的一个事实。
更多相关信息:
Improving startup time of Clojure REPL with Leiningen on the Raspberry Pi
答案 1 :(得分:4)
如果从项目目录中运行lein repl
,除了启动repl之外,它还将加载项目的源文件。即使对于一个小项目,如果源文件引用外部依赖项,这也会增加大量时间。
java -cp clojure-1.6.0.jar clojure.main
不会加载任何项目源文件或依赖项。
答案 2 :(得分:4)
有多种方法可以改善lein的启动时间。 记录在这里:
答案 3 :(得分:2)
您的第一个问题已得到解答,因此关于第二个问题,我猜您想要的是减少启动时间,因为您通常会加载一些在编码时更改的命名空间。可以从修改后的命名空间重新加载代码,而无需使用(use 'your.namespace :reload)
退出REPL。这样,您可以只启动一次并重新加载更新的命名空间
user=> (doc require)
...
:reload forces loading of all the identified libs even if they are already loaded
:reload-all implies :reload and also forces loading of all libs that the identified libs directly or indirectly load via require or use
...
另一方面,如果您阅读lein help repl
的输出,您将看到如何设置可能会缩短启动时间的REPL服务器和客户端
答案 4 :(得分:1)
在我的例子中,cider-nrepl插件显着地增加了加载时间。
使用jvisualvm进行的快速非科学研究表明,大量时间用于加载&评估文件(0.10-snapshot不是AOT-ed),还有扫描类路径的init逻辑。
使用快速蹦床将启动时间减半。
在我看来,jvm没有比操作系统或文件系统更重要的作用。这完全是关于正在加载的代码。