2012-02-27 14 views
15

Dovrei provare a ridurre a icona il modello include? Li ho usati in qualche modo liberamente, ma mi chiedo se sono inefficienti o aggiungono qualche overhead nel rendering dei template?Il modello di Django include lento?

In alcuni casi sono presenti modelli che includono modelli che includono altri modelli.

risposta

25

Il tempo di rendering del modello è normalmente molto più piccolo del tempo del database in particolare, quindi in genere non è necessario preoccuparsene subito; ci sono altre regioni in cui le prestazioni possono essere aumentate in modo più efficace.

Per la distribuzione, in genere è possibile aumentare le prestazioni delle inclusioni del modello utilizzando the cached loader (potrebbe essere necessario scorrere verso il basso un po '). Quindi carica solo i modelli una sola volta e successivamente può utilizzare il modello compilato anziché caricarlo dal disco.

Per rispondere alla domanda di overhead di rendering del modello, una volta memorizzato nella cache, è abbastanza economico. Non mi preoccuperei affatto. Fatelo in modo tale da massimizzare la manutenibilità del vostro sistema.

Sarebbe probabilmente irresponsabile da parte mia non menzionare (si spera, vi ricordo) due adaggi di ottimizzazione delle prestazioni; sono detti abbastanza comuni che dovresti essere in grado di trovare molte informazioni su di loro se non hai familiarità con loro.

  1. Non ottimizzare in modo prematuro.
  2. Misura — non indovinare.
+1

Ho utilizzato django da 2 anni e non sono mai riuscito a leggere sul caricatore memorizzato nella cache. Grazie. Ahimè, ho solo un upvote da dare. – zsquare

+2

@zsquare: non è certo dato il risalto che penso meriti. L'ho trovato solo perché stavo facendo una particolare cosa non web dove stavo rendendo diversi modelli circa cinquemila volte l'uno in successione e sapevo che * dovevano * essere un modo di metterli in cache, che le persone * dovevano * aver avuto il bisogno prima --- e anche in quel caso non l'ho trovato nei documenti immediatamente ma l'ho trovato tramite un ticket nel bug tracker. –

+11

I template di Django sono straordinariamente lenti, e non è vero che il database sia di solito il collo di bottiglia, solo in alcuni casi. Questo principio è semplicemente un dogma. Quando eseguo 'ab' su una pagina con 7 query tipiche (alcuni join, 1' COUNT', nessuna aggregazione, ecc.) Su Postgres e 20 template include (usando il caricatore in cache) e il rendering dello stesso modello con 0 include (includo lo stesso output inline) in un template, passo da 48 richieste al secondo a 8 richieste al secondo ('ab -n 1000 -c 4 [url]') - 4 worker con uWSGI su un quad core con 8GB di RAM , zero HD IO, ad eccezione del database. – orokusaki

Problemi correlati