這是從HTML5 Boilerplate的的index.html,只是</body>
標記之前:運行腳本標記是否阻止其他腳本標記下載?
<!-- JavaScript at the bottom for fast page loading: http://developer.yahoo.com/performance/rules.html#js_bottom -->
<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.7.2.min.js"><\/script>')</script>
<!-- scripts concatenated and minified via build script -->
<script src="js/plugins.js"></script>
<script src="js/main.js"></script>
<!-- end scripts -->
<!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
mathiasbynens.be/notes/async-analytics-snippet -->
<script>
var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
s.parentNode.insertBefore(g,s)}(document,'script'));
</script>
我知道腳本標記可以阻止並行下載,這是爲什麼it's recommended to put them at the bottom。
我的問題:是否真的瀏覽器等待jQuery來完全下載並執行它甚至開始下載plugins.js
然後script.js
過嗎?
抑或是向前看,儘快開始下載的所有腳本地(並行),只是延緩每個腳本的執行直到前一個已經執行完畢?
這是否意味着像JavaScript異步加載技術這樣的最佳實踐在當今較新的瀏覽器中不那麼重要?他們是否只記得文檔中出現的外部腳本鏈接在並行下載後執行它們的順序?這似乎是因爲如果我看看Chrome開發者工具/資源面板,大量的js文件同時開始下載並且不會像書籍中的屏幕截圖一樣被阻止(例如,「更快的網站」)顯示爲例。 – malthoff
@malthoff:*「他們是否記得在文檔中出現的外部腳本鏈接在並行下載後執行它們的順序?」*正確。如果你有(說)五個腳本,但是它們加載其中兩個的順序並不重要,你可以標記那些'async',在這種情況下(在現代瀏覽器上),只要他們'重新下載,不管順序如何。 –
「但它可以下載並準備好它們。」但事實上,瀏覽器是這樣做的嗎? – callum