2009-03-26 14 views
9

Sto lavorando a un "ottimizzazione" sulla mia applicazione e sto cercando di capire l'output che rails (versione 2.2.2) fornisce alla fine del rendering.Informazioni sui tempi di rendering di Ruby on Rails

Qui è il modo "vecchio":

Rendered user/_old_log (25.7ms) 
Completed in 466ms (View: 195, DB: 8) | 200 OK 

E il modo "nuovo":

Rendered user/_new_log (48.6ms) 
Completed in 337ms (View: 192, DB: 33) | 200 OK 

Queste query erano esattamente gli stessi, la differenza è il vecchio modo è l'analisi dei file di log mentre il nuovo modo è interrogare la tabella dei log del database.

La velocità effettiva della pagina non è il problema (l'utente capisce che questa è una richiesta lenta) ... ma vorrei che la pagina risponda il più rapidamente possibile anche se è una pagina "lenta".

Quindi, la mia domanda è: cosa rappresentano/significano i numeri? In altre parole, qual era il metodo più veloce e perché?

risposta

14

questo:

Rendered user/_old_log (25.7ms) 

è il momento di rendere solo il _old_log modello parziale e proviene da un ActiveSupport::Notification ottenere elaborato da ActionView::LogSubscriber

questo:

Completed 200 OK in 466ms 

È il stato http restituito, così come il tempo totale per l'intera richiesta. Viene da ActionController::LogSubscriber.

Inoltre, notare le voci tra parentesi alla fine:

(Views: 124.6ms | ActiveRecord: 10.8ms) 

Quelli sono i tempi totali per rendere l'intera vista (parziali & tutto) e tutte le richieste al database, rispettivamente, e provengono da ActionController::LogSubscriber pure.

-1

Il tuo nuovo modo è trascorrere meno tempo nel complesso, ma più tempo a rendere il modello.

+0

Puoi analizzare (o indicarmi una scrittura) su come interpretarli da solo? –

3

La risposta di Jordan è corretta. Per parafrasare, il primo numero è il tempo di caricamento della pagina. Il secondo è il tempo impiegato dalla visualizzazione per generare. L'ultimo numero è il tempo impiegato dal tuo database per gestire tutte le query che hai inviato.

È inoltre possibile ottenere una stima della durata del codice del controller e del modello sottraendo gli ultimi due numeri dal primo numero, ma un modo migliore sarebbe utilizzare il metodo Benchmark.measure (http://www.ruby-doc.org/stdlib/libdoc/benchmark/rdoc/classes/Benchmark.html).

La nuova modalità sembra essere migliorata perché il codice nel controller/modello è più veloce.