这是从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