2010-03-01 17 views
10

sto usando il Django manage.py runserver per sviluppare la mia domanda (ovviamente), ma ci vuole 10 secondi per caricare completamente una pagina perché il server di sviluppo è molto, molto lento a servire supporti statici.Fare server di sviluppo Django più veloce a servire supporti statici

C'è un modo per velocizzarlo o qualche tipo di soluzione alternativa? Sto usando Windows 7.

+3

Come può la tua pagina essere così grande? Quali file di dimensioni stai presentando? Dove sono conservati i tuoi supporti statici? Stai lavorando su un computer tramite 'http: //127.0.0.1: 8000', giusto? Se è così, dovrebbe funzionare incredibilmente veloce. Stai servendo contenuti statici tramite le funzioni di visualizzazione di Django? Se è così, è un errore. –

+0

Il peso totale di una pagina è di circa 53 kilobyte, non di più, ma include molti fogli di stile, immagini e file JavaScript. Sto usando la vista dei supporti statici inclusa con Django per lo sviluppo. – Veeti

risposta

7

Si consiglia di utilizzare invece mod_wsgi e di gestire httpd il supporto statico.

+2

+1: non accelerarlo. Prendi in considerazione la possibilità di correggere il tuo ambiente di sviluppo per utilizzare un server appropriato. Oppure, considera di scoprire perché il tuo supporto statico è così lento. –

+0

Come faccio a configurare mod_wsgi in modo che funzioni come il server di sviluppo, ricaricando le modifiche automaticamente? Una ricerca rapida di Google ha restituito qualcosa che sembrava essere una soluzione che non funzionava in Windows. – Veeti

+0

C'è una voce nella wiki specificatamente sul ricaricamento, con una sezione che tratta i problemi di Win32. –

5

Il server di sviluppo è un'applicazione single-threaded non sicura, quindi non è possibile fare molto.

Un trucco che si potrebbe provare è reindirizzare/site_media al secondo server di sviluppo, ma questo è brutto e probabilmente non sarebbe di grande aiuto. Pertanto, puoi provare a raggruppare/comprimere più risorse in un css/js (ad esempio utilizzando YUI Compressor).

E in ogni caso, è necessario disporre di un server multimediale statico separato, in grado di servire più risorse contemporaneamente.

3

Installare Firefox (se non lo si è già fatto) e installare Firebug Add-On. Riavvia il tuo browser. Nell'angolo in basso a destra fai clic sull'icona "bug" e assicurati che nella scheda "Rete" (è un menu a discesa) del pannello Firebug che si apre nella parte inferiore del browser, il monitor di rete sia attivo.

Ora con la scheda di rete di Firebug aperta, apri la pagina generata da Django che hai osservato caricare lentamente. Dai un'occhiata alle barre della timeline. Noterai che i frammenti colorati di ciascuna barra indicano (s) il motivo del tempo di "caricamento" totale di ciascuna richiesta. Violet, ad esempio, significa che in realtà il browser è in attesa che il server generi la risposta. Grigio significa che sta ricevendo contenuti. E così via. Passando il mouse sopra le barre verrà visualizzata una legenda dei colori.

Con il monitor di rete di Firebug dovresti essere in grado di individuare con precisione esattamente come il tuo browser e/o server impiegano i loro 10 secondi.

+2

Il download effettivo di una risorsa non richiede alcun tempo, ma il server di sviluppo può apparentemente gestire solo una richiesta alla volta , causando la lentezza (?). – Veeti

+0

"una richiesta alla volta" - è perché è a thread singolo in modo che tutte le richieste siano serializzate in coda. –

2

Eseguire lighttpd per servire il contenuto statico e utilizzare il MEDIA_URL per indirizzare le pagine sul server lighttpd che ospita i componenti statici.

0

Un fulmine veloce sulle risorse quando si utilizza NGINX per servire file statici e multimediali. Ecco come va. Tuttavia, dovrai adattare alcuni percorsi in base al tuo caso d'uso e al tuo sistema. Ma penso che questo ti permetterà di cominciare:

1) Scarica Nginx per il sistema, nel suo caso di Windows: http://nginx.org/

2) decomprimere il file zip. Ecco come può essere il tuo file di configurazione NGINX. Questo file vive dentro nginx/conf/:

worker_processes 1; 

events { 
    worker_connections 1024; 
} 

http { 
    include mime.types; 
    default_type application/octet-stream; 
    sendfile on; 
    keepalive_timeout 65; 
    # root path to your project 
    # use "..." if spaces are in the path 
    # you may add a drive letter if required, e.g. root c:/foo 
    # use/instead of \. It's simpler and works 
    root /example/path/django/project/; 
    server { 
     # any free port number will do; Django dev server usually runs on port 80 
     listen 8000 default; 
     server_name localhost; # or 127.0.0.1 
    } 
} 

3) Avviare Nginx chiamando i nginx.exe - senza opzioni necessarie.

4) Tweak settings.py il file del progetto Djnago:

if DEBUG: 
    STATIC_URL = 'http://localhost:8000/static/' 
    # against Django recommendation, I often still use the static 
    # directory for user uploads; old-style Django ;-) 
    MEDIA_URL = 'http://localhost:8000/static/uploads/' 

Ora, gli URL statici in Django dovrebbe essere simile a questa: http://localhost:8000/static/js/base.js

...5) Arrestare il server chiamando:

taskkill /f /IM nginx.exe 

Beh, questo è tutto. Ho digitato questo rapidamente, quindi fammi sapere se qualcosa non è chiaro o non funziona per te. Potrei migliorare questa risposta di conseguenza.

Problemi correlati