CSS in einer separaten Datei oder nicht?

9

Was ist eine bessere Option: CSS in einer separaten Datei oder auf derselben Seite zu speichern?

Vergessen wir die Tatsache, dass durch das Ändern des CSS für eine Datei alle HTML-Seiten direkt angewendet werden können. Ich benutze dynamische Sprachen, um die gesamte Ausgabe zu generieren - also ist das egal.

Ein paar Dinge, die ich mir vorstellen kann:

  1. CSS in einer separaten Datei erzeugt weniger Bandbreite.
  2. CSS in einer separaten Datei benötigt eine weitere HTTP-Anfrage.

Auf der anderen Seite, wenn ich die Datenübertragung mit Zlib komprimiere, sollte das CSS auf der gleichen Seite in Bezug auf Bandbreite keine Rolle spielen, richtig? Also, ich bekomme eine weniger HTTP-Anfrage?

    
Tower 30.05.2009, 12:45
quelle

7 Antworten

1

Wenn Sie HTML dynamisch generieren (z. B. aus Vorlagen), können Sie CSS durch CSS-Einbettung dynamisch mit dem gleichen Kontext (Daten, Programmstatus) wie beim Erstellen des HTML generieren. anstatt den gleichen Kontext bei einer nachfolgenden Anfrage zum Erzeugen des CSS erneut einzustellen.

Betrachten Sie zum Beispiel eine Seite, die eines von mehreren hundert Bildern für einen Hintergrund verwendet, abhängig von einem Zustand, der teuer zu berechnen ist. Du könntest

  1. Listen Sie alle mehreren hundert Bilder in Regeln in einer separaten, statischen CSS-Datei auf und generieren Sie dann einen entsprechenden Klassennamen in Ihrem dynamischen HTML oder
  2. Generieren Sie den HTML-Code mit einem einzelnen Klassennamen, und generieren Sie dann bei einer nachfolgenden Anfrage CSS mit einer Regel für den Namen, der das gewünschte Bild verwendet, oder
  3. Do (2), aber generieren Sie das in den HTML eingebettete CSS in einer einzigen Anfrage

(1) vermeidet das Wiederholen der Berechnung des teuren Zustands, nimmt jedoch einen größeren Einfluss auf den Datenverkehr (mehr Pakete, um eine viel größere CSS-Datei zu verschieben). (2) Wird die Statusberechnung zweimal durchgeführt, sondern eine kleinere CSS-Datei. Nur (3) führt die Zustandsberechnung einmal durch und dient dem Ergebnis in einer einzigen HTTP-Anfrage.

    
Dave W. Smith 30.05.2009, 18:11
quelle
31

Der Hauptvorteil einer externen CSS-Datei ist:

  • Es kann auf mehreren Seiten verwendet werden; und
  • Es kann zwischengespeichert werden, damit es nicht auf jeder Seite geladen werden muss.

Wenn also das dynamisch generierte CSS zwischen Seiten oder mehreren Ansichten derselben Seite wiederverwendet werden kann, könnte eine externe Datei einen Mehrwert schaffen.

Es gibt einige allgemeine Muster für dynamisch generiertes CSS.

1. Generieren einer Teilmenge für eine Seite

Ich habe das gelegentlich gesehen. Ein Entwickler entscheidet, die Menge an CSS pro Seite zu beschränken, indem nur das gesendet wird, was notwendig ist. Ich kann mir nicht vorstellen, dass dies der Fall ist, aber ich erwähne es aus Gründen der Vollständigkeit. Dies ist eine Fehlleitung bei der Optimierung. Es ist billiger, die ganze Menge zu senden und nur effektiv zu cachen.

2. Benutzerdefiniertes Thema

Wenn der Benutzer ein bestimmtes Aussehen für Ihre Website auswählt, darüber spreche ich. Dies bedeutet, dass sie möglicherweise ein ganzes CSS-Paket auswählen und es möglicherweise eine begrenzte Auswahl gibt. In der Regel wird dies durch eine oder mehrere Basis-CSS-Dateien und dann durch eine oder mehrere CSS-Dateien für das Design erreicht. Die beste Lösung besteht darin, die richtige Kombination externer CSS-Dateien zu senden, indem Sie den Seitenkopf mit den richtigen <link> -Elementen dynamisch generieren und anschließend diese Dateien effektiv zwischenspeichern.

3. Benutzergesteuertes Design

Dies geht über (2) hinaus, wo der Benutzer Farben, Schriftarten und Größen auswählen kann, bis zu dem Punkt, wo Sie diese Auswahlmöglichkeiten nicht zu einem einzigen Themenbündel zusammenfassen können, sondern dafür einen CSS-Satz generieren müssen Benutzer. In diesem Fall haben Sie wahrscheinlich noch ein gemeinsames CSS. Senden Sie das als externe CSS-Dateien (wiederum effektiv zwischenspeichern).

Der dynamische Inhalt ist möglicherweise am besten auf der Seite, oder Sie können immer noch externe Dateien verwenden, da kein Grund dafür besteht, dass <link> nicht auf eine Datei, sondern auf ein Skript zeigen kann . Zum Beispiel:

%Vor%

Dabei wird die Abfragezeichenfolge dynamisch von Ihrer Kopfzeile aus generiert, die angemeldet ist. Dieses Skript sucht die Benutzereinstellungen und generiert eine dynamische CSS-Datei. Dies kann effektiv zwischengespeichert werden, während es direkt in die HTML-Datei eingefügt werden kann (es sei denn, die gesamte HTML-Datei kann effektiv zwischengespeichert werden).

4. Regelbasierte CSS-Generierung

Ich habe vorher ein Berichtssystem geschrieben, das eine Menge Regeln annahm, die entweder vom Benutzer oder einem Berichtsschreiber und einem benutzerdefinierten Bericht festgelegt wurden, und erzeugte eine vollständige HTML-Seite (basierend auf den von ihnen angeforderten Tabellen und / oder Diagrammen) Berichtsdefinition) und formatierte sie nach den Regeln. Das war wirklich dynamisches CSS. Tatsache ist, dass auch hier Caching möglich ist. Die HTML-Seite generiert eine dynamische Verknüpfung wie folgt:

%Vor%

Dabei steht "Jahresumsatz" für die Berichts-ID und 0001 für eine Version. Wenn sich die Regeln ändern, erstellen Sie eine neue Version und jede Version für jeden Bericht kann effektiv zwischengespeichert werden.

Fazit

Ich kann also nicht definitiv sagen, ob externe CSS-Dateien für Sie geeignet sind oder nicht, aber wenn ich für jedes der oben genannten Szenarien gesehen und entwickelt habe, fällt es mir schwer zu glauben, dass Sie keine Form von Caching erhalten CSS an welcher Stelle sollte es extern sein.

Ich habe über das Thema effektives CSS in Supercharging CSS in PHP

Sie können auch auf die verwandte Frage Mehrere Javascript / CSS-Dateien: am besten verweisen Praktiken?

    
cletus 30.05.2009 12:47
quelle
14

Es gibt eine Methode, bei der sowohl Google als auch Yahoo den Nutzen von Inline-CSS anwenden. Zum ersten Mal werden die Besucher wegen des schnellen Ladens CSS (und sogar JavaScript) in den HTML-Code einbetten und dann im Hintergrund die separaten CSS- und JS-Dateien für das nächste Mal herunterladen.

Steve Souders (Yahoo!) schreibt Folgendes:

  

[...] die beste Lösung ist im Allgemeinen   um das JavaScript und CSS wie zu implementieren   externe Dateien. Die einzige Ausnahme   Ich habe gesehen, wo Inlining vorzuziehen ist   ist mit Homepages, wie Yahoo! s   Titelseite ( Ссылка ) und   Mein Yahoo! ( Ссылка ). Zuhause   Seiten, die wenige haben (vielleicht nur eine)   Die Seitenansicht pro Sitzung kann dies finden   Inlining JavaScript und CSS-Ergebnisse in   schnellere Antwortzeiten für Endbenutzer.

    
Török Gábor 30.05.2009 15:27
quelle
1

Browser können die CSS-Dateien zwischenspeichern (sofern sich dies nicht wesentlich ändert). Die Bandbreite sollte sich nicht ändern, da die Informationen gesendet werden, unabhängig davon, wo Sie sie abgelegt haben.

Wenn das CSS also nicht ganz statisch ist, kostet es weniger Zeit, es auf die Seite zu legen.

    
Ikke 30.05.2009 12:50
quelle
1

Ich verwende immer eine Mischung aus beidem.

  • Site-weite Stile sind in einer separaten Datei ( minimiert und gezippt ),
  • Alle seitenspezifischen Stile werden in <style> eingefügt (ich habe meine Seitenvorlagen eingerichtet, um das einfache Einfügen von CSS-Bits in <head> jederzeit zu erleichtern).
Kornel 30.05.2009 12:54
quelle
1

Ja und nein. Verwenden Sie für die meisten Regeln eine CSS-Datei. Ihre Seite sollte trotzdem einheitlich aussehen. Für seltene, spezielle Fälle oder dynamisch generierte Regeln können Sie inline 'style=""' verwenden. Alles, was klebt, sollte in die .css-Datei verschoben werden, und zwar nur, um das Einschließen, Mash-ups usw. einfacher zu machen.

    
Matt Willtrout 31.05.2009 01:01
quelle
0

Halte es getrennt. HTML für Centent, CSS für Stil, JavaScript für Logik.

    
Mahtar 30.05.2009 15:11
quelle

Tags und Links