5
$ time java -jar clojure-1.4.0.jar -e '(println "Hello world")'
Hello world

real    0m4.586s

$ time python clojure.py  -c '(py/print "Hello world")'

real    0m14.690s

$ time mono Clojure.Main.exe -e '(println "hello world")'
hello world

real    0m4.843s

/* clojure-metal is not tested due to not being written at the moment */

Clojure 的启动时间是否可以像我运行 Perl 或 Python 脚本时那样少?启动时间慢是底层框架或 Clojure 的问题(迟早可以修复)还是设计使然?

注意:我已经知道 start-persistent-server-than-connect-to-it 解决方法。

4

2 回答 2

4

ClojureScript 可以很快启动。这个数字有点误导,因为它在编译时会删除死代码。这意味着这个片段被编译成print("hello world");. 这是我在我的机器上得到的:

$ echo '(js/print "hello world")' > hello.cljs
$ cljsc hello.cljs '{:optimizations :advanced}' > hello.js
$ time rhino hello.js 
hello world

real    0m0.466s

为了比较,这是我使用普通clojure得到的:

$ time java -jar clojure-1.4.0.jar -e '(println "hello world")'
hello world

real    0m1.369s
于 2013-04-10T15:08:18.760 回答
3

启动时间主要是因为 Clojure 本身在初始化方面所做的工作。其中一些任务非常重要,例如加载和编译核心 Clojure 命名空间。在不同的平台实现上运行并不会真正改变这一点。

但是,未来有很大的优化潜力:

  • Clojure 本身的大部分内容可以提前编译
  • Clojure 编译器本身的性能可以提高
  • 延迟加载和/或编译可以减少感知延迟(可能是最大的胜利:大多数代码不需要 clojure.core 和其他依赖项中的所有命名空间,或者至少不需要立即)
  • 非常聪明的人可能会弄清楚如何进行并行加载和编译

请注意,尽管 JVM 经常(不公正地)受到指责,但 JVM 在这里基本上是无关紧要的:现代 JVM 的启动时间约为 0.1 秒。

实际上,我将这一点用于用 Clojure 编写的 GUI 应用程序:通过使用一种main方法在纯 Java 中编写启动代码,您可以有一个启动屏幕,并且您的 GUI 的第一个屏幕几乎立即出现,然后将 Clojure 与您的其余部分一起加载后台应用程序代码。

于 2013-04-10T02:39:47.210 回答