2013-10-01 54 views
9

我認爲現在和以後使用clojure代替shell腳本會很好,但啓動時間大約爲900ms太慢了。我會然後 谷歌 startpage爲「nailgun clojure」,但唯一的結果顯示是像vimclojure特殊情況。那時我假裝沒有時間,轉而採用更快速的起步語言awk用nailgun加速clojure啓動時間

那麼,nailgun怎麼能用來加速clojure的啓動時間呢?

回答

21

Debian的

執行以下操作一次:

apt-get install nailgun       # install nailgun 
java -server -jar /usr/share/java/nailgun.jar& # run nailgun server 
ng-nailgun ng-cp /usr/share/java/clojure-1.4.jar # add clj to classpath 

現在,服務器正在運行和配置,你可以在上面運行Clojure的腳本:

ng-nailgun clojure.main path/to/myscript.clj 

在我情況下,實際腳本的啓動時間降低到80ms,而沒有釘槍的啓動時間爲900ms。

化妝實際運行的腳本更方便,創建包含以下行的一個可執行文件ng-clojure,並把它放在您的路徑:

ng-nailgun clojure.main "[email protected]" 

在你Clojure的shell腳本,添加此作爲第一行:

#!/usr/bin/env ng-clojure 

然後使Clojure的shell腳本的可執行文件和類似

0123運行
path/to/myscript.clj 

OSX

brew install nailgun 
ng-server 
ng ng-cp ~/.m2/repository/org/clojure/clojure/1.5.1/clojure-1.5.1.jar 

然後執行如上腳本。

更新:使用它一段時間後,它似乎並沒有完美地工作。有時我得到的隨機錯誤不會在沒有釘槍運行時發生,有時似乎有內存泄漏,這使得釘槍JVM隨着時間消耗所有內存,最終使系統交換到磁盤。還沒有記憶描述這一點,但想要添加這個單挑。

+0

海量!有人應該在Planet Clojure博客上分享這一點。 – progo

+0

嘗試在一臺Java服務器上運行不同的事情時,不會出現代碼衝突問題?還是我誤解了一些東西? – rvirding

+0

@rvirding我不確定你的意思是「代碼衝突」,但如果這不起作用,我不會感到驚訝。例如,可能存在靜態全局狀態等問題。 –