2013-05-14 13 views
6

Prima non usavo ritz-nrepl, e nrepl ha impiegato circa 10 secondi, ma è comunque tollerabile dal momento che non lo riavvio spesso.Esiste comunque la possibilità di ridurre il tempo di avvio nrepl (ritz-repl)?

Quando ho provato ritz-repl, sono occorsi circa 30 secondi e consuma circa 1,3 GB di memoria. Questo mi rende riluttante a usarlo.

Ho persino lanciato un SSD sperando che possa aumentare la velocità, perché ho sentito qualcuno dire che "a malapena si nota il lein repl del tempo di avvio" usando ubuntu + ssd. Ma non posso dire la differenza tra ssd e hdd. Non so se ho fatto qualcosa di sbagliato o se è solo un mito.

+1

L'ho acceso solo quando ho bisogno di un'introspezione variabile pesante. Il resto del tempo uso il normale nrepl. La mia esperienza di sempre è che ritz-nrepl è tutt'altro che maturo. Sto usando Fedora + SSD e questo è solo il modo in cui è, 30 sec è del tutto normale per me. Inoltre, dal momento che devo disattivare il completamento automatico (ac-nrepl) a livello globale (perché altrimenti emacs si blocca) non è molto interessante per la maggior parte del tempo del flusso di lavoro di sviluppo. –

+0

Grazie per le informazioni! A proposito, come è il tuo tempo di avvio nrepl crudo? Ho 6 anni senza dipendenze e circa 15 con 7 o giù di lì. – LoveProgramming

+0

Sì, non l'ho misurato ma questo è tutto. Per la maggior parte dello sviluppo di solito utilizzo questa macro per ottenere l'introspezione nel repl: (defmacro dbg [x] '(let [x # ~ x] (println" dbg: "'~ x" = "x #) x #)) –

risposta

1

Ci potrebbero essere dei modi per ridurre il tempo di avvio di un server nrepl che include ritz, ma per la maggior parte sarete bloccati con almeno i 10 secondi necessari per avviare jvm sulla vostra macchina. Per me è una specie di ritardo inaccettabile quando si fa lo sviluppo interattivo.

In alternativa è possibile utilizzare un approccio di ricarica del codice più intelligente utilizzando the clojure.tools.namespace library. In pratica mantiene in memoria un grafico di dipendenza e ricarica solo quegli spazi dei nomi che sono stati modificati dall'ultimo aggiornamento.

Questo funzionerà fuori dalla scatola per alcuni ma non tutti i codici Clojure. Vedi the 'Preparing Your Application' section of the readme per ulteriori informazioni su quei casi limite da evitare.

Spero che questo aiuti!