我有一对夫妇的有关属性的问题async及defer对<script>标签,该标签在HTML5的浏览器我的理解只有工作。
async
defer
<script>
我的一个网站有两个外部JavaScript文件,它们当前位于</body>标记上方;第一个是来自Google的jquery,第二个是本地外部脚本。
</body>
async在页面底部添加两个脚本是否有任何好处?
将async选项添加到两个脚本并将它们放在页面顶部的页面中,会有任何好处<head>吗?
<head>
这是否意味着它们会在页面加载时下载?
<script defer src=...
<script async src=...
如果我async启用了两个脚本
最后,在HTML5更常用之前,我最好还是保持现状吗?
保持脚本正确</body>。在某些情况下,异步可以与位于此处的脚本一起使用(请参见下面的讨论)。Defer不会对位于此处的脚本产生太大的影响,因为DOM解析工作几乎已经完成。
如果您将脚本放在正文的末尾,则HTML将在较早的浏览器中显示得更快</body>。因此,为了保持旧版浏览器的加载速度,您不想将它们放置在其他任何位置。
如果您的第二个脚本依赖于第一个脚本(例如,您的第二个脚本使用第一个脚本中加载的jQuery),那么在没有其他代码来控制执行顺序的情况下就无法使它们异步,但是您可以使它们延迟,因为延迟脚本会仍然可以按顺序执行,只是直到文档被解析之后。如果您具有该代码,并且不需要立即运行脚本,则可以使它们异步或延迟。
您可以将脚本放入<head>标记中并将其设置defer为,脚本的加载将推迟到DOM被解析之前,并且将在支持defer的新浏览器中快速显示页面,但对您完全没有帮助。在较旧的浏览器中,它并没有比</body>在所有浏览器中都能正确使用脚本快得多。因此,您可以了解为什么最好将它们放在前面</body>。
当您真的不在乎脚本何时加载,并且用户依赖的其他任何内容都不依赖于脚本加载时,异步会更有用。引用次数最多的使用异步的示例是Google Analytics(分析)之类的分析脚本,您不需要等待任何东西,而且也不是迫切需要立即运行,而且它独立存在,因此没有其他依赖于此的脚本。
通常,jQuery库不是异步的理想选择,因为其他脚本依赖于它,并且您想安装事件处理程序,以便页面可以开始响应用户事件,并且您可能需要运行一些基于jQuery的初始化代码来建立初始状态。页面的 可以异步使用它,但必须对其他脚本进行编码才能在加载jQuery之前执行。