He escrito algunas aplicaciones de utilidad pequeñas en Clojure que compilo en archivos ejecutables JAR ("uberjars") usando Maven y maven-shade-plugin. Estos uberjars contienen versiones desempaquetadas de clojure.jar y otras bibliotecas (es decir, commons-cli) de las que depende la aplicación. Son convenientes porque puedo enviarlos a un cliente sin requerir que el cliente instale Clojure (todos los clientes ya tienen el JRE instalado).Clojure application startup performance
He encontrado que las aplicaciones Clojure tardan varios segundos en arrancar, mientras que las aplicaciones similares escritas en Java comienzan en segundos en las mismas máquinas (tiempo para mostrar un mensaje de uso, por ejemplo).
Sospecho que es porque Clojure está compilando algo del código en la biblioteca clojure.core ya que hay código fuente (.clj
archivos) en el archivo clojure.jar.
¿Hay alguna manera de precompilar este código fuente? ¿Se puede hacer algo más para acelerar el rendimiento de inicio? He escuchado quejas de los clientes sobre cuánto tiempo lleva la puesta en marcha (y no saben o no les importa si la aplicación está escrita en Clojure o Java o Foobar).
Vea también http://blog.ndk.io/solving-clojure-boot-time.html y http://dev.clojure.org/display/design/Improving+Clojure+Start+Time – Vadzim