Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 为什么莱宁根开始的时候这么慢?_Clojure_Leiningen_Read Eval Print Loop - Fatal编程技术网

Clojure 为什么莱宁根开始的时候这么慢?

Clojure 为什么莱宁根开始的时候这么慢?,clojure,leiningen,read-eval-print-loop,Clojure,Leiningen,Read Eval Print Loop,我使用leinrepl在控制台中执行clojure repl。 当我运行它时,需要超过15秒。 当我运行java-cp clojure-1.6.0.jar clojure.main时,只需几秒钟 为什么lein repl这么慢?有什么办法可以加快速度吗 我的环境: H/W:MacBookAir 操作系统:MacOS10.9Mavericks CPU:i7 内存:8GB 如果从项目目录中运行lein repl,则除了启动repl之外,它还会加载项目的源文件。即使对于一个小项目,如果源文件引用外部

我使用
leinrepl
在控制台中执行clojure repl。 当我运行它时,需要超过15秒。 当我运行
java-cp clojure-1.6.0.jar clojure.main
时,只需几秒钟

为什么
lein repl
这么慢?有什么办法可以加快速度吗

我的环境:

  • H/W:MacBookAir
  • 操作系统:MacOS10.9Mavericks
  • CPU:i7
  • 内存:8GB

如果从项目目录中运行
lein repl
,则除了启动repl之外,它还会加载项目的源文件。即使对于一个小项目,如果源文件引用外部依赖项,这也会增加大量时间


java-cp clojure-1.6.0.jar clojure.main
不会加载任何项目源文件或依赖项。

您的第一个问题已经得到了回答,所以关于第二个问题,我想您想要的是减少启动时间,因为您通常会加载一些在编写代码时被更改的名称空间。通过
(使用'your.namespace:reload)
,可以从修改过的命名空间重新加载代码,而无需退出REPL。这样,您可以只启动一次并重新加载更新的名称空间

user=> (doc require)


另一方面,如果您阅读了
lein help repl
的输出,您将看到如何设置一个repl服务器和客户端,以减少启动时间Leiningen启动两个JVM,并将它们连接在一起。要做到这一点,它必须装载额外的东西。您键入的提示符与计算代码的Clojure进程不同。Leiningen还必须解析您的项目文件,并确保所有内容都按要求进行了设置,或者,如果您的maven配置目录中缺少任何内容,就从web上获取所需内容。如果你仔细阅读的话,有一些选项可以稍微加快速度。我认为莱宁根创业缓慢只是目前生活中的一个事实

更多相关信息:


有多种方法可以缩短lein的启动时间。 此处记录:


在我的例子中,苹果酒nrepl插件显著缩短了加载时间

使用jvisualvm进行的快速非科学研究表明,加载和评估文件花费了大量时间(0.10-snapshot不是AOT ed),并且还有扫描类路径的初始化逻辑

使用快速蹦床将启动时间缩短了一半


在我看来,jvm的作用并不比操作系统或文件系统大。这一切都与加载的代码有关。

它启动一个JVM。可能只是JVM启动时间。@Kungi正如我在问题中所说的,当我运行repl by
java-cp clojure-1.6.0.jar clojure.main
时,它启动得相对较快。所以这不是因为JVM的启动时间。我在我的系统上试用了它,它和你的MacBookAir完全一样。您是正确的
lein repl
启动所需的时间大约是原来的两倍。leiningen可能会加载更多的代码,这些代码需要提前编译到JVM中。但我知道这不是一个令人满意的答案。Leiningen启动了两个JVM,并将它们连接在一起。要做到这一点,它必须装载额外的东西。您键入的提示符与计算代码的Clojure进程不同。Leiningen还必须解析您的项目文件,确保所有内容都按要求设置,或者从web上获取所需内容。在Leiningen示例项目文件中,如果仔细阅读,有一些选项可以稍微加快速度。我认为Leiningen启动缓慢只是目前生活中的一个事实;java-cp target/*standalone.jar clojure.main我尝试了许多不同的方法,但是lein repl的启动时间仍然比直接通过java运行要慢得多。我想知道通过
java-cp~/.m2/repository/org/clojure/clojure/1.7.0/clojure-1.7.0.jar clojure.main的别名运行它会不会出错。这并不能解决苹果酒的问题,但对于规模较小的实验来说,这是可行的,不是吗?也许我可以用点滴让它更快?我不知道,@Agzam。其他一些答案可能是相关的。那么总体而言,您在Pi上的开发设置获得了合理的经验吗?
  :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