6 Stimmen

Warum sollten CSS und JS nicht über Django laufen?

Gemäß diese Antwort à Kann ich JavaScript- und CSS-Dateien in Django gzipen? :

Ihr CSS und JS sollte nicht durch Django auf Ihrem Produktionssystem gehen. Sie müssen Apache (oder Nginx, oder was auch immer) konfigurieren, um diese zu dienen, und wenn Sie dies tun, werden Sie in der Lage sein, gzip-Kompression dort und nicht in Django einzurichten.

Die Antworten auf diese Frage erklären nicht den Grund für diese Anforderung/Ratschläge. Ist es einfach eine gute Praxis für die Geschwindigkeit, um statische Inhalte (Bilder/CSS/JS) von einem anderen Server zu liefern? Oder steckt da mehr dahinter?

11voto

Lennart Regebro Punkte 157632

Apache und Nginx sind schneller als Django (weil sie viel weniger und viel einfachere Dinge tun). Daher ist die Bereitstellung von CSS und JS mit Django eine Verschwendung von Ressourcen.

Obwohl "sollte" hier zu stark ist, IMO. "Sollte, wenn Sie viel Verkehr haben", eher.

3voto

Narendra Kamma Punkte 1421

Der von einem Webserver angebotene Inhalt kann grob in zwei Kategorien eingeteilt werden.

  1. Statisch
  2. Dynamisch

Statische Dateien (CSS/JS/Img...) ändern sich im Allgemeinen nicht (d.h. sie können von der Festplatte gelesen und an den Client gesendet werden. ( Keine Vorverarbeitung vor dem Schieben erforderlich )

Dynamische Dateien (Ihre dynamischen HTML-Seiten) müssen in der Regel auf verschiedene Weise verarbeitet werden (Datenbankdaten + Formularverarbeitung + Nachrichten ...) und an den Client gesendet werden.

Wenn sich eine Sache nicht ändert und für jeden Benutzer gleich bleibt, sollten Sie diese Aufgabe nicht dem Web-Framework zuweisen (es ist eine zusätzliche Belastung), sondern dem Webserver überlassen. .

2voto

rombarcz Punkte 1564

In Produktionsumgebungen haben Sie bereits real http-Server, die eine Verbindung zu django (entweder über mod_python, fcgi oder wsgi), so seine nur gesunden Menschenverstand, um Dateien direkt von ihm dienen.

Dadurch werden Antworten schneller gesendet:

  • Wenn Sie statische Dateien über einen richtig konfigurierten Apache oder Nginx bereitstellen, ist der Overhead minimal. Auf Anfrage prüft der Server, ob die Datei im angegebenen Pfad existiert, und sendet sie dann an den Browser (und fügt natürlich einige Header hinzu).
  • wenn Sie statische Datei über django hinter Apache oder nginx konfiguriert dienen erstens Webserver verbindet sich mit django, dann django behandelt Dinge viel komplexer:
    • erstellt ein Anforderungsobjekt,
    • führt urlpatterns REGEXP-Matches durch, bis es Zeilen findet, die für statisch verantwortlich sind,
    • führt einen statischen Serving-Code aus, der ihn an den Benutzer zurücksendet...

Es wird viel weniger Ressourcen verbrauchen:

  • jeder Django-Prozess verbraucht LOT von Speicher, denken Sie wie 10 mal als gleich konfiguriert Apache-Prozess, die gleiche statische Datei,

Es wird besser skalieren:

  • Richtig konfiguriert kann nginx 100x mehr Anfragen verarbeiten und verbraucht dabei viel weniger CPU und Speicher...

Sie kann ausgelagert werden:

  • obwohl es geschrieben wird, dass Sie Apache oder Nginx konfigurieren müssen, müssen Sie nicht - Sie können diese Dateien an Dienste wie Amazon S3 oder Google APIs auslagern, so dass js & css "näher" an den Benutzern sind und im Falle von Diensten wie Google APIs besteht die Möglichkeit, dass die Bibliothek, die Sie hinzufügen möchten (wie jQuery), bereits im Browser des Benutzers zwischengespeichert ist.

Alle diese Dinge zusammengenommen machen Ihre Website einfach zu einem schneller laden .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X