Sollten Sie Ihre js, html und css wirklich getrennt halten?

10

Ich höre / lese die ganze Zeit, dass es sauberer ist, Ihre js , html und css getrennt zu halten. Angeblich macht es das Warten und Debuggen einfacher. Angeblich ist es effizienter, weil es Caching / Verkleinerungs ermöglicht CSS und JS - Dateien.

Was mich betrifft, verwende ich Web-Frameworks (Django, Rails, ...), Javascript-Vorlagenbibliotheken, ... Ich teile eine einzelne HTML-Seite häufig in mehrere wiederverwendbare Vorlagen auf - eine Art Widgets, wenn Sie dies wünschen . Zum Beispiel kann ich ein Newsfeed- Widget, ein Widget mit mehreren Auswahlmöglichkeiten usw. haben. Jedes Widget hat ein einheitliches Layout auf den verschiedenen Seiten und wird von seinem Javascript gesteuert.

Bei dieser Organisation, die mir so sauber wie möglich erscheint und die Wiederverwendbarkeit maximiert, kann ich nur schwer verstehen, warum es einfacher wäre, alle JS und CSS in separaten Dateien zu speichern. Ich denke, es wäre zum Beispiel viel einfacher :

in der Datei mit mehreren Widgets auswählen

  • html
  • grundlegendes CSS-Layout
  • Kontrolle über direkte Interaktionen und UX-Verbesserungen mit etwas JS.

Ich denke , dass , wie es mehr wiederverwendbar, viel besser verwaltbar ist, weil Sie blättern durch ein Fett haben keine js - Datei, wechseln Sie dann zu und blättern durch eine Fett CSS - Datei, wechseln Sie wieder in Ihre HTML - Datei ... hin und her .

Ich würde gerne wissen, wie ihr euren Code organisiert, wenn ihr euch an die normalerweise empfohlene Trennung hält.

  • Gibt es wirklich gute Gründe dafür?
  • Ist es nicht so, dass die Anleitungen im Web normalerweise davon ausgehen, dass Sie kein ausgefallenes Tool verwenden (in diesem Fall würde ich gerne aktuellere Online-Lesungen für Best Practices erhalten)?
  • Ist es nur eine Frage der Präferenz?
sebpiq
quelle
2
Das Prinzip, auf das Sie anspielen, heißt Trennung von Präsentation und Inhalt.
Robert Harvey
8
Beachten Sie, dass Ihre Benutzer das eingebettete HTML und CSS bei jedem Laden der Seite herunterladen, wenn Sie es nicht in Dateien trennen, anstatt es einmal herunterzuladen und zwischenzuspeichern.
Nicole
@RobertHarvey: ok, gute Referenz ... Aber der einzige Grund für die Trennung von Inhalt / Präsentation ist die Verbesserung der Lesbarkeit der Maschine. Ich denke jedoch, dass es keine Rolle spielt, wann Widgets mit JS zur Seite hinzugefügt werden. Das grundlegende HTML enthält sie sowieso nicht !?
Sebpiq
1
@Renesis: Das ist ein großer Nachteil, stimmt ... aber mit Django zum Beispiel ist es ziemlich einfach, Ihre js und css aus mehreren Vorlagen zu sammeln und sie in einer einzigen Datei zusammenzuführen.
Sebpiq
2
Das heißt, Sie können eine normale Webseite, eine mobile Webseite und eine druckbare Seite bereitstellen, ohne jede Seite von Hand von Grund auf neu schreiben zu müssen, indem Sie einfach die Präsentation (dh das CSS) optimieren.
Robert Harvey

Antworten:

5

Ich behalte diese Struktur bei

Für jede Seite oder jedes Steuerelement gebe ich einen Ordner für die HTML-Seite (oder Aspx oder PHP usw.). In diesem Ordner befinden sich auch Ordner für JS-, XML-, Bilder- und CSS-Dateien. Diese sind für seiten- / steuerungsspezifische, nicht gemeinsam genutzte Ressourcen bestimmt.

Im Site-Stammverzeichnis befinden sich auch die Ordner js, xml, images und css, die jeweils standortweite Ressourcen enthalten.

Die standortweiten JS- und CSS-Dateien werden serverseitig aufgerollt und als einzelne JS-Datei zurückgegeben. Die seitenspezifischen, da es normalerweise nur eine pro Seite gibt, werden alleine gelassen.

Dies organisiert meine Ressourcen hinsichtlich ihres Umfangs. Und obwohl ich möglicherweise ein Dutzend js-Dateien im js-Stammordner habe, werden sie als eine js-Ressource zurückgegeben, indem sie serverseitig kombiniert und minimiert werden (und das Ergebnis zwischengespeichert wird).

Ich lade auch keine für pagex spezifischen Ressourcen, wenn ich auf pagey bin. Die einzige "Verschwendung" befindet sich möglicherweise in der Site-weiten Ressourcendatei. Da sie jedoch zwischengespeichert ist und viele der Ressourcen an mehreren Stellen verwendet werden, ist sie effizienter.

CaffGeek
quelle
1
Hört sich gut an ! Ich hatte nicht daran gedacht, die Dateien einfach in separaten Ordnern zu gruppieren und zum Servieren zu sammeln! Es behebt alle Probleme - Caching, SoC, ... - und ermöglicht gleichzeitig die Kapselung. Groß !
Sebpiq
2

Im Allgemeinen besteht die Konvention darin, separate Dateien für JS / CSS / HTML zu haben, um eine Trennung von Inhalt, Präsentation und Verhalten aufrechtzuerhalten. Wenn jedoch Geschwindigkeit zum Problem wird, ist alles möglich.

Ryathal
quelle
Separate Dateien verbessern tatsächlich die Geschwindigkeit, anstatt sie zu verschlechtern: \
Raynos
Kleinere Mengen an CSS und JS in der HTML-Datei sind eine Seitenanforderung anstelle von drei Seitenanforderungen, was möglicherweise besser ist, um eine große Anzahl von Seiten sehr schnell bereitzustellen. Oder kombinieren Sie sie zumindest nach Bedarf - code.google.com/speed/page-speed/docs/rtt.html
Bratch
1

in der Datei mit mehreren Widgets auswählen

  • html
  • grundlegendes CSS-Layout
  • Kontrolle über direkte Interaktionen und UX-Verbesserungen mit etwas JS.

Ich habe ein Organisationstool ( Trinity ), mit dem Sie das tun können.

Außer dass die Widget-Datei in 3 kleine Dateien aufgeteilt ist, HTML, CSS und JS. Dies bedeutet, dass Sie Ihre separaten Dateien haben, diese jedoch weiterhin verknüpft sind.

Dies vermeidet das Problem von fetten Dateien, gibt Ihnen aber dennoch separate Dateien.

Einfach gesagt, Trennungen von Bedenken bedeuten nicht, dass Sie eine große HTML / CSS / JS-Datei haben sollten. Sie sollten mehrere Drillinge <HTML, CSS, JS>für all Ihren wiederverwendbaren gekapselten Code haben

Jetzt ist nichts falsch daran, all dies in einer Datei zu haben, solange sie klar voneinander getrennt sind.

Also ein Widget, das aussieht

<div id="wrapper">
  <style scoped> CSS code </style>
  <script> JS code </script>
  HTML code
</div>

Ist in Ordnung und großartig. Wenn Sie nicht alles in einer Datei haben, ist es für einen Betreuer viel zu einfach, mit dem Mischen und Anpassen von CSS / JS / HTML zu beginnen.

Es macht es viel zu einfach, dass es sich im Laufe der Zeit in Spaghetti verwandelt.

Der Hauptgrund, warum Leute für separate Dateien werben, ist zweierlei

  • separate Downloads. Sobald Sie CSS / JS-Code kopieren und in mehrere "Widgets" einfügen, müssen Sie ihn in die eigene Datei einbeziehen.
  • Überwältigt aggressiv den Spaghetti-Code, indem er sich nicht darauf verlässt, dass der Autor seine CSS / JS / HTML in einer einzigen Datei gut getrennt hält
Raynos
quelle
Ja ... also der gleiche Vorschlag wie Chad! Und tatsächlich habe ich es sofort versucht und ich bin verkauft :) Das ist so viel sauberer so ... Dein Tool ist für Knoten richtig? Ich sollte so etwas für Django finden ...
sebpiq
@sebpiq ist es für Knoten, aber ich portiere es auf den Client. Es ist auch Alpha und ich arbeite intensiv daran, es zu einer vollständigen HTML / CSS / JS-Organisationsplattform zu machen, einschließlich der Wiederverwendung von Client / Server-Code. Ich persönlich bezweifle, dass Sie so etwas auf anderen Plattformen finden würden, Sie können es aber o /
Raynos