Ho passato un po' di tempo a mettere a punto la mia app su heroku e ho passato un po' di tempo a lavorare sull'ottimizzazione delle prestazioni delle app Rails in una varietà di impostazioni.
Quando eseguo ab -n 300 -c 75 ...myapp.com.... # che è un backup del mio sito principale ed è nel piano cedro gratuito con unicorn
Requests per second: 132.11 [#/sec] (mean)
Time per request: 567.707 [ms] (mean)
Time per request: 7.569 [ms] (mean, across all concurrent requests)
(questo è contro una home page che non fa nulla di intenso, quindi lo sto fornendo solo come un esempio "quanto velocemente potrebbe essere heroku sul piano gratuito con una pagina molto semplice?", non un "le tue app dovrebbero essere così velocemente")
Ecco la mia checklist di Rails Performance Tuning 101:
-
Misurare prima il tempo di caricamento del browser/della pagina (il browser fa molte richieste, ab ti parla solo di una di esse e di solito la richiesta della tua pagina principale non è il problema), ottieni i numeri di base del caricamento della pagina da strumenti come www.webpagetest.org o www.gtmetrix.com per le pagine di fronte pubbliche, o gli strumenti del browser Yslow, google page speed o dynatrace per le pagine private. Se guardi il diagramma a cascata del caricamento della pagina (il pannello "Net" in Chrome/firefox), di solito mostra che il tuo html si carica rapidamente (meno di un secondo), ma tutto il resto impiega 1-3 secondi per essere caricato. Segui i consigli su Yslow/velocità della pagina su come migliorare (assicurati di utilizzare completamente il materiale della pipeline di risorse di Rails 3.1)
-
Leggi i tuoi file di registro/nuova reliquia per trovare il punto debole della richiesta "più lenta/accettata più frequentemente" e profila cosa succede per quella richiesta (è lento ruby/molto utilizzo di mem o molte query?) Hai bisogno per avere un modo affidabile per rilevare e monitorare i problemi di prestazioni, e non semplicemente cambiare le cose a caso. Dopo aver identificato alcune aree di destinazione, crea script di test per aiutarti con prima/dopo il test e dimostrare che la tua modifica aiuta e rilevare se si verifica una regressione.
-
La mancanza di indici nelle colonne db è uno dei problemi più comuni e più facili da risolvere. Esegui Spiega sulle query di destinazione o esamina il registro delle query lente per vedere cosa sta facendo il pianificatore di query. Aggiungi indici per chiavi esterne, colonne di ricerca o dati primari (indice di copertura) a seconda dei casi. Riprova con i dati di produzione effettivi per dimostrare che fa la differenza. (puoi eseguire spiegare in heroku, nonché eseguire query per indici mancanti o non utilizzati)
-
La maggior parte delle app Rails con prestazioni scadenti soffrono di query N+1 perché è così facile scrivere order.owner.address.city e non pensare a cosa succede quando è in un ciclo. Le query N+1 non sono necessariamente query lente, quindi non vengono visualizzate nel registro delle query lente, è solo che ce ne sono molte ed è più efficiente eseguirle tutte in una volta. Usa :include o .includes() per il caricamento ansioso di quei dati, oppure prova a fare la tua query in un altro modo.
-
Analizza il flusso della tua app e cerca opportunità di memorizzazione nella cache. Se l'utente rimbalza avanti e indietro tra la pagina dell'indice e una pagina dei dettagli, e viceversa, forse una vista ajax dei dettagli, senza uscire dalla pagina dell'indice, fornirebbe loro i dati di cui hanno bisogno in modo più rapido. Ho scritto alcuni altri pensieri sul mio blog
Ho tenuto una presentazione su queste tecniche e altre idee a Chicago alla conferenza WindyCityRails di quest'anno. Puoi guardare il video qui sul mio www.RailsPerformance blog .com Quello che mi piace di Heroku è che devi essere scalabile fin dall'inizio. Quando guardi le discussioni sulla mailing list, vedi che la maggior parte delle persone è a conoscenza delle migliori pratiche per le prestazioni e di come ottenere il massimo dal server. Mi piace anche il modo in cui se vuoi rimanere a buon mercato, impari come i trucchi per l'ottimizzazione delle prestazioni ti daranno il massimo.
Buona fortuna!