Ho scritto alcune piccole applicazioni di utilità in Clojure che compilo in file JAR eseguibili autonomi ("uberjars") usando Maven e il plugin maven-shade-plugin. Questi uberjars contengono versioni non compresse di clojure.jar e altre librerie (es .: commons-cli) da cui dipende l'applicazione. Sono convenienti perché posso inviarli a un cliente senza richiedere che il cliente installi Clojure (tutti i clienti hanno già installato JRE).Prestazioni di avvio dell'applicazione Clojure
Ho scoperto che le applicazioni Clojure impiegano diversi secondi all'avvio, mentre applicazioni simili scritte in Java iniziano in secondi secondari sulle stesse macchine (ad esempio, il tempo di mostrare un messaggio di utilizzo).
Ho il sospetto che sia perché Clojure è al volo compilando parte del codice nella libreria clojure.core in quanto vi è il codice sorgente (file .clj
) nel file clojure.jar.
C'è un modo per precompilare questo codice sorgente? Si può fare qualcos'altro per accelerare le prestazioni di avvio? Ho sentito lamentele da parte dei clienti sulla durata dell'avvio (e non sanno o non si preoccupano che l'applicazione sia scritta in Clojure o Java o Foobar).
Vedere anche http://blog.ndk.io/solving-clojure-boot-time.html e http://dev.clojure.org/display/design/Improving+Clojure+Start+Time – Vadzim