2014-01-18 99 views
1

我已經多次使用過jQuery,但我只是意識到,雖然我沒有做任何事情來等待或檢查要加載的jQuery插件,但運行jQuery代碼並沒有遇到問題。我的典型代碼是:是否需要檢查jQuery庫是否已加載?

<html> 
... 
    <script type="text/javascript" src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script> 
... 
<body> 
    ... 
</body> 
<script> 
    //jQuery code, eg: 
    $('#xxx').load('yyyy.html'); 
    ... // more code 
</script> 
</html> 

然後最近,我經歷了從codeorigin.jquery.com有時失敗或採取20s左右加載文件。在使用Chrome瀏覽器時,我注意到Chrome瀏覽器不會呈現HTML頁面,也不會執行其中的JavaScript代碼,直到引用的外部腳本文件的加載活動完成(可能是成功或失敗)爲止。這很好。

我的問題:它是一個標準的瀏覽器規範,瀏覽器總是會等待加載頁面中引用的所有外部腳本才能在呈現和執行html頁面之前完成嗎?或者,瀏覽器是否只是按順序執行頁面,等待每一個完成後再移到下一行,而不是異步?或者沒有定義的順序,網絡設計人員有責任在使用它們之前確保所有外部腳本已準備就緒?

+1

加載不是異步。如果您將腳本放在標題中,它們將在到達主體之前加載並執行。 – Cristy

+1

同意,將您的腳本標記移動到正文的底部。除非添加async或defer屬性,否則在運行之後,腳本將被評估。 –

回答

0

我相信你只是幸運而已!可能您的瀏覽器緩存了該文件,因此很容易獲得。是!有需要檢查。我遇到了圖書館或資源不可用的問題,例如使用Google地圖。並不能保證瀏覽器會做什麼。當它看到內聯腳本時,它會立即執行它。想想<script>document.write("hello")</script>。瀏覽器將異步獲取多個資源以加速下載。

也就是說,最好的做法是在加載整個文檔後使用<body onload="initialize();">開始運行腳本。如果你在一個單獨的JS文件中有一個自包含的腳本,你可以確定它不會運行,直到加載。我一直在做的CoffeeScript最近,和腳本在不同的文件,它們附加處理程序<body>所以它只能運行在頁面加載:

$(document).ready -> 
    $("#comments").on "click", ".aComment", ->