2013-10-01 13 views
9

Hin und wieder denke ich, es wäre nett zu clojure für Shell-Skripte verwenden, aber eine Startzeit von etwa 900ms ist viel zu langsam. Ich würde dann google startpage für "nailgun clojure", aber die einzigen Ergebnisse, die sich zeigen, sind für spezielle Fälle wie vimclojure. Das ist, wenn ich, vortäuschend, keine Zeit zu haben, zu mehr awk Bezirkssprachen umschalte, die schneller beginnen.Beschleunigen clojure Startup Zeit mit nailgun

Also, wie kann nailgun verwendet werden, um die Startzeit von clojure zu beschleunigen?

Antwort

21

Debian

Sie das einmal folgende:

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 

Nun, da der Server und konfiguriert ausgeführt wird, können Sie Ihre clojure Skripte darauf laufen:

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

In meinem In diesem Fall ging die Startzeit des eigentlichen Skripts auf 80 ms zurück, verglichen mit 900 ms ohne Nagelpistole.

Um machen das eigentliche Skript bequemer ausgeführt wird, erstellen Sie eine ausführbare Datei ng-clojure die folgende Zeile enthält, und es irgendwo in den Weg stellen:

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

In Ihrem clojure Shell-Skript, dieses Add als erste Zeile:

#!/usr/bin/env ng-clojure 

dann die clojure Shell-Skript ausführbar machen und es wie

laufen
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 

dann wie oben Ihr Skript ausführen.

Update: Nachdem es für eine Weile verwendet wurde, scheint es nicht einwandfrei zu funktionieren. Manchmal bekomme ich zufällige Fehler, die nicht auftreten, wenn ohne Nagelpistole laufen, und manchmal scheint es eine Speicherverlust, die die Nailgun JVM verbraucht den gesamten Speicher im Laufe der Zeit macht schließlich das System auf die Festplatte zu tauschen. Habe noch kein Speicherprofil dafür erstellt, wollte aber dieses Heads-Up hinzufügen.

+0

Massive! Jemand sollte dies auf einem Planet Clojure Blog teilen. – progo

+0

Würdest du keine Probleme mit Code-Konflikten bekommen, wenn du verschiedene Dinge auf einem Java-Server ausführen willst? Oder habe ich etwas falsch verstanden? – rvirding

+0

@rvirding Ich bin mir nicht sicher, was Sie mit "Code-Zusammenstöße" meinen, aber ich wäre nicht überrascht, wenn das nicht 100% ig funktioniert hätte. Es könnte zum Beispiel Probleme mit Dingen wie dem statischen globalen Zustand geben. –