我有一对夫妇的有关属性的问题async
及defer
对<script>
标签,该标签在HTML5的浏览器我的理解只有工作。
我的一个网站有两个外部JavaScript文件,它们当前位于</body>
标记上方;第一个是来自Google的jquery,第二个是本地外部脚本。
关于站点加载速度
async
在页面底部添加两个脚本是否有任何好处?将
async
选项添加到两个脚本并将它们放在页面顶部的页面中,会有任何好处<head>
吗?- 这是否意味着它们会在页面加载时下载?
- 我认为这会导致HTML4浏览器的延迟,但是会加快HTML5浏览器的页面加载速度吗?
使用 <script defer src=...
- 将
<head>
具有属性的两个脚本加载到内部 将defer
具有与之前拥有脚本相同的影响</body>
? - 我再次假设这会使HTML4浏览器变慢。
使用 <script async src=...
如果我async
启用了两个脚本
- 他们会同时下载吗?
- 还是一次与其余页面一起?
- 脚本的顺序是否会成为问题?例如,一个脚本依赖于另一个脚本,因此,如果一个脚本下载速度更快,则第二个脚本可能无法正确执行等。
最后,在HTML5更常用之前,我最好还是保持现状吗?
似乎defer和async的行为至少在执行阶段取决于浏览器。注意,推迟仅适用于外部脚本。我假设异步遵循相同的模式。
在IE 11及以下版本中,顺序似乎是这样的:
在Edge,Webkit等中,async属性似乎被忽略或放置在末尾:
在较新的浏览器中,data-pagespeed-no-defer属性在任何其他外部脚本之前运行。这适用于不依赖DOM的脚本。
注意:当需要外部脚本的明确执行顺序时,请使用defer。这告诉浏览器按照文件中的放置顺序执行所有延迟的脚本。
旁白:加载时外部javascript的大小确实很重要...但是对执行顺序没有影响。
如果您担心脚本的性能,则可能要考虑缩小或简单地使用XMLHttpRequest动态加载它们。