2009-12-05 14 views
6

Posso usare partial come voglio o devo trattenermi per evitare di portare le mie viste a una scansione con molto traffico?Sta chiamando un'operazione parziale costosa?

+1

C'è ovviamente un sovraccarico, ma tutto ciò che ho visto è a favore dell'astrazione con partial. Non vedo l'ora che le persone che sanno quello che stanno facendo rispondendo a questo. +1 per una grande domanda. –

+0

In generale, direi "usa quanto vuoi". Ma dipende davvero da quanto tempo ci vuole per rendere i tuoi particolari parziali. Se inserisci il tuo log di sviluppo ('tail -f log/development.log') e carichi una pagina, vedrai quanto tempo ci vuole per renderizzare ogni partial. Se uno o più file è lento, trovare un modo per velocizzarlo o memorizzarlo nella cache. Altrimenti, nessun problema. –

risposta

11

C'è un overhead ovvio usando partial ma questo non è qualcosa di cui dovresti probabilmente preoccuparti.

I partial sono file. Quando si esegue il rendering di un'azione senza partial, l'azione "costa" 1 file (che non è completamente vero, ma per semplificare la spiegazione). Se l'azione esegue il rendering di 4 partials, si ottiene un costo di 5. Ciò significa che sono disponibili 4 ulteriori chiamate IO e il costo reale per ogni chiamata dipende dal carico del server, dalle prestazioni del server e così via.

Ma questo costo è importante? Nella mia esperienza, per il 99% delle volte no. Inoltre, vale la pena scegliere i vantaggi dell'utilizzo di partial in termini di leggibilità e manutenibilità del codice.

Se le prestazioni devono essere una caratteristica chiave, probabilmente dovresti cercare velocità e miglioramenti altrove.

Ricorda: Ruby non è un linguaggio di programmazione superveloce e l'espressività del codice ha sempre preso il primo posto a favore delle performance. Rails accetta implicitamente questa convenzione, anche se il team Rails si è sempre concentrato sulle prestazioni (e Rails 3 è la dimostrazione pratica c'è sempre spazio per miglioramenti)

Detto questo, puoi tranquillamente usare partial e ridurre l'overhead dell'applicazione con un po 'di intelligenza meccanismo di caching. Ad esempio, puoi posizionare il rendering della raccolta all'interno di un blocco cache in modo che un'istruzione della raccolta di rendering venga eseguita solo una volta, quindi l'app carica semplicemente 1 file cache anziché 10 parziali non memorizzati nella cache.

Uno degli errori più insoliti che ho fatto molte volte all'inizio era di preoccuparmi delle prestazioni nel modo sbagliato, detto, senza effettivamente eseguire benchmark. Ricordo una volta quando stavo tentando di eliminare una singola query di database a favore di un hash codificato perché "la query costa", senza rendersi conto che c'era un'altra query stupida che stava caricando un'intera raccolta di tabelle senza l'istruzione include, che aveva come risultato eseguire la seconda query 3 volte più lentamente.

Quindi, se davvero ti interessano le prestazioni, probabilmente non dovresti evitare l'uso di partial ma invece assicurati di sfruttare tutte le altre funzionalità che Rails ti offre per ridimensionare la tua applicazione.

+1

questa è la risposta –

Problemi correlati