2011-11-17 37 views
7

如果我在我的網頁一樣多的腳本標籤:是按順序加載還是並行加載的外部JavaScript文件?

<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> 

我可以依靠的事實,即從以前的代碼是後一類被加載時已經可用?

+0

似乎值得一提的是,在下面的正確答案之上,腳本可以通過引入異步代碼來「破壞」執行順序。例如,如果第一個腳本包含一行'setTimeout(function(){alert(「Hello」);},0);',那麼在其他腳本加載完成後會出現該警報。事實上,在整個HTML被加載之後。 –

回答

5

一般來說,腳本下載順序(見this page):

因爲JavaScript代碼可以改變網頁 頁面的內容和佈局,瀏覽器延遲渲染如下腳本 標籤之前的任何內容該腳本已被下載,解析並執行。 然而,更重要的是往返時間,許多瀏覽器阻止 的下載文件中引用的資源[如樣式表,圖片和其他腳本] 的腳本後,直到這些腳本是 下載並執行。

+1

+1。 – Thilo

+0

「許多瀏覽器阻止下載資源,直到腳本執行完畢」:我認爲很多新近的瀏覽器都會預取其他資源,儘管(假設不管腳本的結果如何,他們最終都會被需要)。 – Thilo

3

它們並行加載,但它們只在每個文件加載完成後才運行。 所以答案是肯定的,你可以依靠這個事實。

5

短:是:

,而無需腳本標籤中指定deferasync性質,規範說,該瀏覽器有順序(同步)加載這些文件。

換句話說,其中瀏覽器發現需要一個普通的腳本標籤以獲得

  • 加載
  • 執行
  • (方框任何其他呈現/執行過程,同時執行上述)

儘管「現代」瀏覽器可能仍在優化該流程,但這些步驟需要應用(至少,類似流程)。這就是爲什麼您應該放置腳本標籤而無需進一步詳細說明總是在<body>標籤的底部。即使DOM渲染進程在加載/執行腳本時也會停止。

爲了避免這種情況,你可以指定這些腳本標記一個deferasync(僅限HTML5)的財產,就像

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

,告訴瀏覽器,它是一個腳本這意味着該文件有後執行被解析。

參見https://developer.mozilla.org/En/HTML/Element/Script

7

它們可以並行地加載(通過網絡),但它們在序列進行評估。

所以是的,你可以依靠訂單。