Po umieszczeniu elementu script
na stronie, niezależnie od tego, gdzie się znajduje, chyba że korzystasz z defer
or async
attributes i przeglądarki, z której korzysta użytkownik, obsługuje ona wszystkie parsowania HTML i kontrola jest przekazywana do Interpreter języka JavaScript (oczekiwanie na pobranie pliku skryptu, jeśli skrypt znajduje się w oddzielnym pliku). Powoduje to renderowanie Twojej strony. Więc jeśli nie masz naprawdę dobrego powodu do umieszczenia tagu skryptu w innym miejscu, umieszczenie tagu skryptu na samym dole strony poprawi jego pozorny czas ładowania.
Oczywiście mogą istnieć naprawdę dobre powody. Na przykład, jeśli skrypt ma używać document.write
do wyprowadzania HTML na stronę (tak jak robi wiele skryptów reklamowych), to oczywiście musi znajdować się w miejscu, w którym musi iść HTML. Podobnie, jeśli masz przycisk w interfejsie użytkownika i podpinacie handler'a do przycisku, który wywołuje twój skrypt, jeśli skrypt znajduje się niżej na stronie, może to być okno z możliwością kliknięcia przycisku przez użytkownika zanim pojawi się skrypt obsługujący kliknięcie, albo nie robiąc nic, albo otrzymując błąd, który negatywnie wpływa na wygodę użytkownika.
Jeśli twoja strona jest w pełni funkcjonalna bez żadnego skryptu (dobra praktyka w przypadku większości stron internetowych ogólnego przeznaczenia), a skrypt po prostu poprawia wrażenia, umieść skrypt na dole. Jeśli skrypt ma kluczowe znaczenie dla funkcjonalności witryny (całkowicie dopuszczalna praktyka dla niektórych witryn, a na pewno dla wielu aplikacji internetowych), najlepiej, aby proces budowania łączył wszystkie niestandardowe skrypty JavaScript w jednym pliku, zminimalizował go i łącze to w head
, tak że trzymasz rzeczy tak krótko, jak to możliwe. (Jeśli twój skrypt opiera się na bibliotekach, możesz załadować je niezależnie od CDN w celu przyspieszenia lub dodać do niestandardowego kodu, w zależności od oceny, która będzie szybsza dla twoich użytkowników.)
To wszystko prędkość/Postrzegany argument prędkości. Z punktu widzenia separacji problemów upewnij się, że wszystkie JavaScript są w oddzielnych plikach (przynajmniej oddzielne pliki źródło; możesz mieć proces kompilacji, który połączy twój kod JavaScript z kodem HTML, aby utworzyć plik ouput do wyświetlenia użytkownikowi bez naruszania separacji obaw, ale wtedy nie można uzyskać buforowania JavaScriptu, jeśli używasz go na więcej niż jednej stronie).Gdy masz już osobny plik JavaScript, będziesz musiał połączyć się ze skryptem gdzieś na, nie sądzę, że to naprawdę robi dużą różnicę w stosunku do separacji obaw o punkt widzenia gdzie, o ile nie masz mieć elementy skryptu zaśmiecone na całym źródle HTML.
Edit: Zobacz też David Murdoch's answer cytując Google od wartości bloków skryptu inline do podłączenia interfejsu. Chciałem to odnieść, ale nie mogłem go znaleźć; on zrobił. To jest ból, ponieważ (chyba że robisz to za pomocą skryptu budującego), to naprawdę psuje oddzielenie obaw. Z drugiej strony nie powinno być tak trudno zrobić z tagami i skryptem budowania ...
+1 Szukałem * tego cytatu, ale nie mogłem go znaleźć. :-) Pamiętam, że byłem zaskoczony, że działa to niezawodnie w różnych przeglądarkach, ale jeśli ludzie Google Apps mówią, że tak jest, jestem pewien, że w to wierzę. –
@ T.J. Crowder ... Wciąż czekam na ten artykuł, który oni (Erik Arvidsson i przyjaciele?) Zamierzają opublikować na ten temat. :-) –
Tak, cóż, ludzie są zajęci. ;-) Czyniąc takie rzeczy, naprawdę trzeba użyć narzędzia do kompilacji lub czegoś, co wstępnie przetwarza pliki do wydania, prawda? Ostatnią rzeczą, którą chciałbyś zrobić, jest poprosić projektantów, aby pieprzyli swój HTML z tymi rzeczami ... –