2010-03-01 4 views
10

Ich bin mit dem Django manage.py runserver für meine Anwendung zu entwickeln (natürlich), aber es dauert 10 Sekunden bis einer Seite vollständig geladen werden, da der Entwicklungs-Server ist sehr, sehr langsam zu dienen statische Medien.macht Django Entwicklungs-Server schneller auf Serviertemperatur statische Medien

Gibt es eine Möglichkeit, es zu beschleunigen oder eine Art Workaround? Ich benutze Windows 7.

+3

Wie kann Ihre Seite so groß sein? Welche Dateigrößen präsentieren Sie? Wo werden Ihre statischen Medien aufbewahrt? Sie laufen auf einem Computer über 'http: //127.0.0.1: 8000', oder? Wenn ja, sollte es erstaunlich schnell laufen. Unterstützen Sie statische Inhalte über Django View-Funktionen? Wenn ja, ist das ein Fehler. –

+0

Das Gesamtgewicht einer Seite beträgt etwa 53 Kilobyte, nicht mehr - aber das beinhaltet viele Stylesheets, Bilder und JavaScript-Dateien. Ich verwende die in Django enthaltene statische Medienansicht zur Entwicklung. – Veeti

Antwort

7

Betrachten Sie stattdessen mod_wsgi und haben httpd die statischen Medien.

+2

+1: Beschleunigen Sie nicht. Erwägen Sie, Ihre Entwicklungsumgebung zu reparieren, um einen geeigneten Server zu verwenden. Oder überlegen Sie, warum Ihre statischen Medien so langsam sind. –

+0

Wie richte ich mod_wsgi so ein, dass es wie der Entwicklungsserver funktioniert und Änderungen automatisch neu geladen werden? Eine schnelle Google-Suche ergab etwas, das eine Lösung zu sein schien, die in Windows nicht funktionierte. – Veeti

+0

Dort gibt es einen Eintrag im Wiki speziell zum Nachladen, mit einem Abschnitt, der Win32-Probleme behandelt. –

5

Entwicklungsserver ist einfach unsichere Single-Thread-Anwendung, so dass Sie nicht viel tun können.

Ein Trick, den Sie versuchen könnten, ist es,/site_media zum zweiten Entwicklungsserver umzuleiten, aber das ist hässlich und würde wahrscheinlich nicht so viel helfen. Sie könnten also versuchen, mehrere Assets in einem css/js zu bündeln/komprimieren (z. B. mit YUI Compressor).

Und auf jeden Fall sollten Sie separate statische Medien Server haben, die mehrere Assets gleichzeitig dienen können.

3

Installieren Sie Firefox (falls noch nicht geschehen) und installieren Sie Firebug Add-On. Starten Sie Ihren Browser neu. Klicken Sie in der unteren rechten Ecke auf das Symbol "Fehler" und stellen Sie sicher, dass der Netzwerkmonitor im Register "Netzwerk" (es ist ein Dropdown) des Firebug-Fensters unten im Browser aktiv ist.

Öffnen Sie jetzt die geöffnete Dibago-generierte Seite von Firebug, die Sie langsam geladen haben. Sehen Sie sich die Timeline-Balken an. Sie werden bemerken, dass die farbigen Fragmente jedes Balkens den Grund für die gesamte Ladezeit jeder Anfrage anzeigen. Violett bedeutet beispielsweise, dass der Browser tatsächlich darauf wartet, dass der Server die Antwort generiert. Grau bedeutet, dass Inhalte empfangen werden. Und so weiter. Bewegen Sie den Mauszeiger über die Balken, um eine Farblegende anzuzeigen.

Mit Firebug Netzwerk-Monitor sollten Sie in der Lage sein, genau zu bestimmen, wie genau Ihr Browser und/oder Server ihre 10 Sekunden verbringen.

+2

Der eigentliche Download eines Assets dauert keine Zeit, aber der Entwicklungsserver kann scheinbar nur eine Anfrage gleichzeitig verarbeiten , verursacht die Langsamkeit (?). – Veeti

+0

"eine Anfrage zu einer Zeit" - es ist, weil es single-threaded ist, so dass alle Anfragen in der Warteschlange serialisiert werden. –

2

Führen Sie lighttpd aus, um den statischen Inhalt zu liefern, und verwenden Sie die MEDIA_URL, um die Seiten auf den lighttpd-Server zu verweisen, der die statischen Daten verwaltet.

0

Blitzschnelle und einfache Ressourcen bei der Verwendung von NGINX für die Bereitstellung von statischen und Mediendateien. Hier ist, wie es geht. Sie müssen jedoch einige Pfade entsprechend Ihrem Anwendungsfall und System anpassen. Aber ich denke, das wird Ihnen den Einstieg:

1) Laden Sie NGINX für Ihr System, in Ihrem Fall von Windows: http://nginx.org/

2) Entpacken Sie die ZIP-Datei. So kann Ihre NGINX-Konfigurationsdatei aussehen. Diese Datei lebt in 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) Starten Sie NGINX durch die nginx.exe aufrufen - keine Optionen benötigt.

4) Optimieren Sie Ihre Djnago settings.py-Datei des Projekts:

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/' 

Nun, so etwas wie dies die statischen URLs in Django sollte aussehen: http://localhost:8000/static/js/base.js

...5) Stoppen Sie den Server durch einen Anruf:

Nun, das ist es. Ich tippte das schnell, also lassen Sie es mich wissen, wenn etwas unklar ist oder nicht für Sie arbeitet. Ich kann diese Antwort entsprechend verbessern.

Verwandte Themen