我有几个关于属性async和标签的问题,据我了解defer,这些<script>标签仅适用于 HTML5 浏览器。
async
defer
<script>
</body>我的一个网站有两个外部 JavaScript 文件,目前位于标签上方;第一个是来自 google 的jquery ,第二个是本地外部脚本。
</body>
async添加到页面底部的两个脚本有什么好处吗?
async将选项添加到两个脚本并将它们放在页面顶部是否有任何优势<head>?
<head>
这是否意味着他们在页面加载时下载?
我认为这会导致 HTML4 浏览器延迟,但它会加快 HTML5 浏览器的页面加载速度吗?
<script defer src=...
<script async src=...
如果我有两个async启用的脚本
最后,在 HTML5 更常用之前,我最好保持原样吗?
将您的脚本保留在</body>. 在少数情况下,异步可以与位于那里的脚本一起使用(参见下面的讨论)。Defer 不会对位于那里的脚本产生太大影响,因为 DOM 解析工作几乎已经完成。
这是一篇解释异步和延迟之间区别的文章:http: //peter.sh/experiments/asynchronous-and-deferred- javascript-execution-explained/。
如果您将脚本保留在正文末尾之前,您的 HTML 将在旧浏览器中显示得更快</body>。因此,为了保持旧浏览器的加载速度,您不想将它们放在其他任何地方。
如果您的第二个脚本依赖于第一个脚本(例如,您的第二个脚本使用第一个脚本中加载的 jQuery),那么您不能在没有额外代码来控制执行顺序的情况下使它们异步,但您可以使它们延迟,因为延迟脚本会仍然按顺序执行,只是在文档被解析之后才执行。如果您有该代码并且不需要立即运行脚本,则可以使它们异步或延迟。
您可以将脚本放在<head>标签中并将它们设置为defer,脚本的加载将被延迟,直到 DOM 被解析,这将在支持延迟的新浏览器中快速显示页面,但这对您没有帮助在较旧的浏览器中,它实际上并不比将脚本</body>放在所有浏览器中都快。所以,你可以明白为什么最好把它们放在前面</body>。
当您真的不关心脚本何时加载并且用户不依赖于该脚本加载时,异步会更有用。使用 async 最常被引用的示例是像 Google Analytics 这样的分析脚本,您不希望等待任何东西,并且不急于很快运行,它是独立的,所以没有其他东西依赖它。
通常 jQuery 库不适合异步,因为其他脚本依赖于它,并且您希望安装事件处理程序以便您的页面可以开始响应用户事件,并且您可能需要运行一些基于 jQuery 的初始化代码来建立初始状态的页面。它可以异步使用,但其他脚本必须在加载 jQuery 之前进行编码才能执行。