2011-11-17 13 views
7

jeśli mam wiele tagów skryptów w moją stronę jak:są zewnętrznymi plikami javascript ładowanymi sekwencyjnie lub równolegle?

<script src="js/jquery-1.7.min.js" type="text/javascript"></script> 
    <script src="js/jquery.jplayer.min.js" type="text/javascript"></script> 
    <script src="js/globals.js" type="text/javascript"></script> 
    <script src="js/sound.js" type="text/javascript"></script> 

mogę polegać na tym, że kod od poprzednich jest już dostępna, gdy te ostatnie są ładowane?

+0

Warto wspomnieć, oprócz poprawnych odpowiedzi poniżej, że skrypt może "zepsuć" kolejność wykonywania, wprowadzając kod asynchroniczny.Na przykład, jeśli pierwszy ze skryptów zawierał wiersz 'setTimeout (function() {alert (" Hello ");}, 0);', alert pojawi się po załadowaniu innych skryptów. W rzeczywistości po załadowaniu całego HTML. –

Odpowiedz

5

Na ogół skrypty pobierane są sekwencyjnie (patrz this page):

Ponieważ kod JavaScript może zmieniać treść i układ sieci web stronie opóźnienia przeglądarek renderowania treści, które następuje skryptu tag aż ten skrypt został pobrany, przeanalizowany i wykonany. Jednak ważniejsze dla razy w obie strony, wiele przeglądarek blokują pobierania zasobów [takich jak arkusze stylów, obrazów i innych skryptów] przywoływanych w dokumencie po skryptach aż te skrypty są pobierane i wykonywane.

+1

+1 dla linku. – Thilo

+0

"wiele przeglądarek blokuje pobieranie zasobów do czasu wykonania skryptu": Myślę jednak, że wiele najnowszych przeglądarek wczytuje wcześniej inne zasoby (zakładając, że niezależnie od wyniku skryptu będą ostatecznie potrzebne). – Thilo

3

Są one ładowane równolegle, ale działają tylko raz, gdy załadowano każdy plik. Więc odpowiedź brzmi: tak, możesz polegać na tym fakcie.

5

Skrót: Tak:

Bez określania właściwości asyncdefer lub w tagu script, spec mówi, że przeglądarka ma do sekwencyjnego (Sync) załadować te pliki.

Innymi słowy, zwykły tag skryptu, który przeglądarka wyszukuje musi dostać

  • ładowane
  • wykonany
  • (blok jakikolwiek inny proces renderowania/wykonanie robiąc wyżej)

Podczas gdy "nowoczesna" przeglądarka prawdopodobnie nadal próbuje zoptymalizować ten proces, te kroki muszą być zastosowane (przynajmniej procesowe). Z tego powodu należy umieszczać znaczniki skryptów bez dodatkowych specyfikacji zawsze na dole znacznika <body>. Nawet proces renderowania DOM zatrzymuje się podczas ładowania/uruchamiania skryptów.

Aby tego uniknąć, można określić defer lub async (tylko HTML5) nieruchomość w tych tagach skryptu, jak

<script defer src="/foo/bar.js"></script> 

który informuje przeglądarkę, że jest to skrypt, który ma być wykonywany po dokument ma został sparsowany.

Patrz https://developer.mozilla.org/En/HTML/Element/Script

7

mogą być załadowane (przez sieć) równolegle, ale są oceniane w sekwencji.

Tak, możesz polegać na zamówieniu.

Powiązane problemy