Czy naprawdę powinieneś trzymać swoje pliki js, html i css oddzielnie?

10

Cały czas słyszę / czytam, że czystsze jest oddzielenie plików js , html i css . Podobno ułatwia to utrzymanie, debugowanie. Podobno jest bardziej wydajny, ponieważ umożliwia buforowanie / minimalizowanie plików css i js .

Jeśli chodzi o mnie, używając frameworków internetowych (Django, Rails, ...), bibliotek szablonów javascript, ... Mam tendencję do dzielenia całkiem jednej strony HTML na wiele szablonów wielokrotnego użytku - jakieś widżety, jeśli chcesz . Na przykład mogę mieć widżet kanału informacyjnego, widżet wielokrotnego wyboru itp. ... każdy z nich ma spójny układ na różnych stronach i każdy jest kontrolowany przez jego fragment javascript.

Dzięki tej organizacji - która wydaje mi się tak czysta, jak to tylko możliwe, maksymalizując możliwość ponownego użycia - nie mogę zrozumieć, dlaczego łatwiej byłoby przechowywać wszystkie pliki js i css w osobnych plikach. Myślę, że byłoby to o wiele prostsze na przykład :

w zaznaczonym pliku wielu widgetów

  • HTML
  • podstawowy układ css
  • kontrola bezpośrednich interakcji i ulepszeń UX z odrobiną JS.

Myślę, że w ten sposób jest bardziej wielokrotnego użytku, o wiele łatwiejsze w utrzymaniu, ponieważ nie musisz przewijać grubego pliku js , a następnie przełączać się i przewijać gruby plik css , ponownie przełączać się na plik HTML ... tam iz powrotem .

Chciałbym wiedzieć, jak porządkujecie swój kod, jeśli trzymacie się rozdziału, który jest zwykle zalecany.

  • Czy istnieją naprawdę dobre powody, aby to zrobić?
  • czy nie jest tak, że przewodniki w Internecie zazwyczaj zakładają, że nie użyjesz żadnego wymyślnego narzędzia (w takim przypadku chciałbym uzyskać bardziej aktualne odczyty online dla najlepszych praktyk)?
  • Czy to tylko kwestia preferencji?
Sebpiq
źródło
2
Zasada, do której się odwołujesz, nazywa się oddzieleniem prezentacji i treści.
Robert Harvey,
8
Pamiętaj, że jeśli nie rozdzielisz plików, użytkownicy będą pobierać osadzony kod HTML i CSS na każdej stronie, zamiast pobierać go raz i buforować.
Nicole,
@RobertHarvey: ok dobre referencje ... Ale jedynym wymienionym tam powodem separacji treści / prezentacji jest poprawa czytelności maszynowej. Myślę jednak, że nie ma znaczenia, kiedy widżety zostaną dodane do strony za pomocą JS. Podstawowy html i tak ich nie zawiera!
sebpiq,
1
@Reneesis: To duża wada, prawda ... jednak w przypadku Django na przykład dość łatwo jest zebrać pliki js i css z wielu szablonów i scalić je w jeden plik.
sebpiq,
2
Oznacza to, że możesz obsługiwać normalną stronę internetową, mobilną stronę internetową i stronę do wydruku, bez konieczności pisania każdej strony ręcznie od zera, po prostu poprawiając prezentację (tj. CSS).
Robert Harvey,

Odpowiedzi:

5

Utrzymuję tę strukturę

Dla każdej strony lub kontrolki daję jej folder dla strony HTML (lub aspx, php itp.). W tym folderze znajdują się również foldery dla plików js, xml, obrazów i plików css. Są to zasoby specyficzne dla strony / kontroli, a nie dla zasobów współdzielonych.

W katalogu głównym witryny znajdują się również foldery js, xml, obrazy i css, z których każdy zawiera zasoby dla całej witryny.

Pliki js i css dla całej witryny są zwijane po stronie serwera i zwracane jako pojedynczy plik js. Specyficzne dla strony, ponieważ zwykle jest tylko jedna na stronę, są pozostawione same sobie.

To organizuje moje zasoby pod względem ich zakresu. I chociaż mogę mieć kilkanaście plików js w folderze głównym js, zostaną one zwrócone jako jeden zasób js przez połączenie i zminimalizowanie ich po stronie serwera (i buforowanie wyniku).

Nie ładuję też zasobów specyficznych dla pagex, kiedy jestem na pagey. Jedyne „marnotrawstwo” może znajdować się w pliku zasobów całej witryny, ale ponieważ jest on buforowany, a wiele zasobów BĘDZIE używanych w wielu miejscach, jest bardziej wydajny.

CaffGeek
źródło
1
Brzmi dobrze ! Nie myślałem o grupowaniu plików w osobnych folderach i gromadzeniu ich do udostępniania! Rozwiązuje wszystkie problemy - buforowanie, SoC, ... - jednocześnie umożliwiając enkapsulację. Wspaniały !
sebpiq,
2

ogólnie konwencja polega na posiadaniu osobnych plików dla JS / CSS / HTML w celu zachowania oddzielenia treści, prezentacji i zachowania. Jeśli jednak prędkość staje się problemem, wszystko idzie.

Ryathal
źródło
oddzielne pliki faktycznie przyspieszają, a nie degradują: \
Raynos
Mniejsze ilości CSS i JS w pliku HTML to żądanie jednej strony zamiast trzech żądań strony, co może być lepsze w przypadku bardzo szybkiego wyświetlania dużej liczby stron. Lub przynajmniej połącz je w razie potrzeby - code.google.com/speed/page-speed/docs/rtt.html
Bratch
1

w zaznaczonym pliku wielu widgetów

  • HTML
  • podstawowy układ css
  • kontrola bezpośrednich interakcji i ulepszeń UX z odrobiną JS.

Mam narzędzie organizacyjne ( trójca ), które cię promuje.

Tyle że plik widżetu jest podzielony na 3 małe pliki: HTML, CSS i JS. Oznacza to, że masz oddzielne pliki, ale nadal są połączone.

Pozwala to uniknąć problemu grubych plików, ale nadal zapewnia oddzielne pliki.

Tak więc po prostu rozłożenie obaw nie oznacza, że ​​powinieneś mieć jeden duży plik HTML / CSS / JS. Powinieneś mieć wiele trojaczków <HTML, CSS, JS>dla całego kodowanego kodu wielokrotnego użytku

Teraz nie ma nic złego w trzymaniu ich wszystkich w jednym pliku, o ile są one wyraźnie rozdzielone.

Tak wygląda widget

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

Jest w porządku i świetnie. Poza tym, że wszystko w jednym pliku sprawia, że ​​opiekun może zbyt łatwo zacząć mieszać i dopasowywać CSS / JS / HTML.

To sprawia, że ​​z czasem staje się zbyt łatwe, aby z czasem przekształcić się w spaghetti.

Głównym powodem, dla którego ludzie promują oddzielne pliki, jest dwojaki

  • oddzielne pliki do pobrania. Jak tylko skopiujesz i wkleisz dowolny kod css / js do wielu „widżetów”, musisz dodać go do własnego pliku.
  • Agresywnie zapobiega kodowi spaghetti, nie polegając na autorze, aby jego plik css / js / html był ładnie rozdzielony w jednym pliku
Raynos
źródło
Tak ... taka sama sugestia jak Chad! I rzeczywiście od razu go wypróbowałem i jestem sprzedany :) To jest o wiele czystsze takie ... Twoje narzędzie jest dla węzła, prawda? Powinienem znaleźć coś takiego dla Django ...
sebpiq,
@sebpiq jest dla węzła, ale przesyłam go do klienta. Jest także w wersji alfa i ciężko pracuję nad tym, aby uczynić z niego całą platformę organizacyjną HTML / CSS / JS, w tym ponowne użycie kodu klient / serwer. Osobiście wątpię, byś znalazł coś takiego na innych platformach, możesz to jednak
portować
1

Dobrą praktyką jest oddzielanie html, css i js, ponieważ ułatwia zarządzanie witryną.

Kiedy zaczynasz, możesz mieć tylko główny plik index.html i pojedynczy plik styles.css, ale bardziej niż prawdopodobne, że Twoja witryna będzie się rozwijać, pojawi się wiele skryptów i arkuszy stylów specyficznych dla poszczególnych elementów lub punkt końcowy.

Korzystanie z separacji:

  • Oddzielny JavaScript może być użyty ponownie na innych stronach
  • Oddzielny CSS może być w stanie łatwo nadać stronie nowy wygląd wraz z ponownym użyciem
  • Oddzielny HTML może być skoncentrowany na treści, a nie na wyglądzie.

Należy również wspomnieć, że CSS / JS może być buforowany, jeśli jest używany na wielu stronach w Twojej witrynie

AjayGohil
źródło
... i istnieje wiele „narzędzi do budowania”, które mogą gromadzić zasoby JS i CSS z (nierozłożonych) pojedynczych plików w celu utworzenia rzeczywistych plików, które są wdrażane ... gromadzenie zasobów, usuwanie (lub wykrywanie) duplikatów, minimalizowanie i wkrótce.
Mike Robinson