2009-01-29 8 views
53

Mam około 7 plików Javascript teraz (dzięki różnym wtyczkom jQuery) i 4-5 plików CSS. Ciekawi mnie, jaka jest najlepsza praktyka radzenia sobie z tymi, w tym, gdzie w dokumencie powinny być załadowane? YSlow mówi mi, że pliki JavaScript powinny być - jeśli to możliwe - dołączane na końcu. Koniec ciała? Mówi, że delimeter wydaje się być, czy piszą treść. Wszystkie moje pliki Javascript są funkcjami i kodem jQuery (wszystko zrobione, gdy jest gotowe()), więc powinno być OK.Wiele plików javascript/css: najlepsze praktyki?

Czy powinienem dołączyć jeden plik CSS i jeden plik JavaScript, a do których zaliczam resztę? Czy powinienem połączyć wszystkie moje pliki w jeden? Czy powinienem umieścić JavaScript w tagach na samym końcu mojego dokumentu?

Edytuj: FWIW tak to jest PHP.

+0

Czy możesz dodać tag "php" i dodać php do tytułu pytania? – ripper234

+0

Jak to jest php pytanie? – BentOnCoding

Odpowiedz

36

Proponuję użyć opcji PHP Minify, która pozwala utworzyć pojedyncze żądanie HTTP dla grupy plików JS lub CSS. Minify obsługuje również GZipping, Compression i HTTP Headers dla buforowania po stronie klienta.

Edycja: Minify umożliwia również ustawienie żądania, tak aby dla różnych stron można było uwzględnić różne pliki. Na przykład podstawowy zestaw plików JS wraz z niestandardowym kodem JS na niektórych stronach lub po prostu podstawowe pliki JS na innych stronach.

Podczas pracy nad rozwojem zawiera wszystkie pliki w normalny sposób, a kiedy zbliżysz się do przejścia do uruchomienia produkcji, zminimalizuj i dołącz wszystkie pliki CSS i JS do jednego żądania HTTP. To bardzo proste w konfiguracji i pracy.

Również tak, pliki CSS powinny być ustawione w nagłówku, a pliki JS wyświetlane na dole, ponieważ pliki JS mogą zapisywać na Twojej stronie i mogą powodować poważne problemy z przekroczeniem limitu czasu.

Oto jak powinno zawierać pliki JS:

</div> <!-- Closing Footer Div --> 
<script type="application/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.1.min.js"></script> 
</body> 
</html> 

Edit: Można również użyć Cuzillion aby zobaczyć, jak strona powinna być ustawiona w górę.

+0

Próbowałem już wcześniej i miałem kilka problemów: po pierwsze mój styl ready() pojawił się później (było to całkiem widoczne, gdy został zastosowany), nie mogłem osadzić wywołań jquery bezpośrednio w moim kodzie (ponieważ jquery. js nie został jeszcze załadowany) i miałem inne dziwne problemy z buforowaniem. – cletus

+0

Nie musisz * mieć *, aby umieścić plik JavaScript na dole, jeśli masz tylko jeden. – VirtuosiMedia

+0

Jest to poprawne, ponieważ pliki JS znajdują się na dole i po tym, jak reszta kodu została już załadowana i uruchomiona. Być może będziesz musiał przekodować swoją stronę, aby to zmienić, jeśli nadal chcesz podnieść swoją ocenę YSlow. Osobiście nie miałem żadnych poważniejszych problemów, włączając w to używanie jQuery w moim kodzie. –

2

Nie wyraźnie powiedział, że masz dostęp do rozwiązania po stronie serwera, ale zakładając, że ty, ja zawsze zniknął z metody wykorzystującej PHP aby wykonać następujące czynności:

jQuery. js.php:

<?php 
$jquery = ($_GET['r']) ? explode(',', $_GET['r']) : array('core', 'effects', 'browser', 'cookies', 'center', 'shuffle', 'filestyle', 'metadata'); 
foreach($jquery as $file) 
{ 
echo file_get_contents('jquery.' . $file . '.js'); 
} 
?> 

z fragmencie powyżej, w miejscu, ja następnie wywołać plik podobnie jak ja normalnie:

<script type="text/javascript" src="jquery.js.php"></script> 

i potem jeśli jestem świadom dokładnego funkcjonalność i” idę potrzebuję, po prostu przekazuję moje wymagania jako ciąg zapytania (jquery.js.php? r = core, effects). Robię dokładnie to samo dla moich wymagań CSS, jeśli są one kiedykolwiek rozgałęzione.

+1

Czy tego rodzaju rzeczy nie blokują buforowania? – cletus

+0

Jeśli buforowanie jest zawsze problemem, jeśli chodzi o zdalne uwzględnianie, większość przeglądarek z przyjemnością rozważy, czy wystarczy wpisać znacznik czasu w adres URL ... –

+0

Ale ... używanie nagłówków buforowania nadal powinno być preferowaną metodą. –

4

Oto, co robię: używam maksymalnie dwóch plików JavaScript i ogólnie jednego pliku CSS dla każdej strony. Rozumiem, które pliki JS będą wspólne dla wszystkich moich stron (lub wystarczająco dużo, żeby było blisko - plik zawierający jQuery byłby dobrym kandydatem), a następnie łączę je i pomniejszają za pomocą jsmin-php, a następnie buforuję połączony plik . Jeśli są jakieś pliki JS, które są specyficzne tylko dla tej jednej strony, łączę je, kopiuję i cache również w jeden plik. Pierwszy plik JS będzie wywoływany na wielu stronach, a drugi tylko na jednym lub kilku.

Możesz użyć tej samej koncepcji z CSS, jeśli chcesz z css-min, choć zazwyczaj używam tylko jednego pliku dla CSS. Jedną rzeczą dodatkową, kiedy tworzę plik pamięci podręcznej, umieszczam mały kod PHP na początku pliku, aby służył jako plik GZipped, który jest właściwie tam, gdzie i tak dostaniesz większość swoich oszczędności. Będziesz także chciał ustawić nagłówek wygasania, aby przeglądarka użytkownika miała większą szansę na buforowanie pliku. Wierzę, że możesz również włączyć GZipping przez Apache.

Do buforowania sprawdzam, czy czas utworzenia pliku jest starszy niż ustawiony przeze mnie czas. Jeśli tak, to ponownie utworzę plik pamięci podręcznej i udostępnię go, w przeciwnym razie otrzymam istniejący buforowany plik.

+0

Uszkodzenie zawsze jest dobre. –

0

Pomysł zminimalizowania i łączenia plików jest świetny.

zrobić coś podobnego na mojej stronie, ale aby ułatwić rozwój Proponuję jakiś kod, który wygląda tak:

if (evironment == production) { 
    echo "<style>@import(/Styles/Combined.css);</style>" 
} else { 
    echo "<style>@import(/Styles/File1.css);</style>" 
    echo "<style>@import(/Styles/File2.css);</style>" 
} 

Powinno to pozwolić zachować swoje pliki oddzielić podczas dev do łatwego zarządzania i użyć połączonej plik podczas wdrożenie do szybszego ładowania stron. Zakłada to, że możesz łączyć pliki i zmieniać zmienne w ramach procesu wdrażania.

Zdecydowanie zajmij się umieszczaniem js na dole i css u góry zgodnie z zaleceniami YUI, ponieważ utrzymanie niskiego poziomu JS ma wymierny wpływ na wygląd reszty strony i wydaje się znacznie szybsze.

+0

Nie wiem, czy składnia tego posta jest podobna do php. To po prostu losowy pseudo kod :) – mjallday

+0

koniec linii 'echo' z; i dodaj "$" przed "środowiskiem" i "produkcją" dla wersji php. :) – andyk

2

Nie polecam używania rozwiązania opartego na javascript (np. PHP Minify), aby uwzględnić twoje css, ponieważ twoja strona stanie się bezużyteczna, jeśli odwiedzający ma wyłączony javascript.

0

ja również mają tendencję do kopiowania + wklej wszystkie moje pluginy jquery do jednego pliku: jquery.plugins.js następnie odwołują się do

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"> 

dla rzeczywistej biblioteki jQuery.