html中<script>标签的async =“async”属性,是什么意思?</script>

时间:2009-05-22 00:49:31

标签: javascript html

HTML中async="async"标记的

<script>属性是什么意思?

<script async="async" src="...."></script>

可以看一下使用here例如

6 个答案:

答案 0 :(得分:53)

如果在外部脚本(带有src =的脚本)上设置了async属性,则支持它的浏览器将在后台下载该脚本,而不会阻止页面上的其他内容。该脚本将在完成下载后执行。

http://dev.w3.org/html5/spec/Overview.html#attr-script-async

正如我在评论中提到的,设置async = true,async = false或async = any都意味着同样的事情。它们启用异步行为。使脚本非异步的唯一方法是完全省略该属性。

http://dev.w3.org/html5/spec/Overview.html#boolean-attributes

答案 1 :(得分:11)

在XHTML中,需要将属性作为属性及其值注释,而HTML则不然。我喜欢这个原则的一致性,所以我总是以下面的形式使用它:

async="async"

这样我可以将我的文档作为application / xhtml + xml提供。

如果您对此不感兴趣,因为您认为以text / html格式提供文档已足够好,那么您可以随时使用:

async

答案 2 :(得分:3)

这只是意味着

  1. 外部脚本异步(或并行),而不会阻止html解析。
  2. 脚本一旦下载立即执行阻止html解析。

  3. Here's一个很好的例子。

    注意:此属性仅适用于外部脚本(具有src属性的脚本),而不适用于内联脚本。

答案 3 :(得分:3)

HTML WHATWG specification包含the following explanation

对于classic scripts,如果存在async属性,则 经典脚本将与解析并行获取并评估为 尽快可用(可能在解析完成之前)。如果 async属性不存在,但defer属性存在, 那么经典脚本将被并行获取并在 页面已完成解析。如果两个属性都不存在,则 立即获取并评估脚本,从而阻止了解析 直到全部完成。

对于module scripts,如果存在async属性,则模块 脚本及其所有依赖项将以并行方式获取 解析,并且模块脚本将在评估后立即评估 可用(可能在解析完成之前)。否则, 模块脚本及其依赖项将与 页面完成解析后进行解析和评估。 (defer 属性对模块脚本没有影响。)

下面的示意图总结了这些内容:

enter image description here

由于大多数历史原因,这些属性的确切处理细节有些琐碎,涉及HTML的许多方面。因此,实施要求必须分散在整个说明书中。 [在HTML规范中描述的]算法描述了此处理的核心,但是这些算法引用了HTML脚本中的开始和结束标记的解析规则,并以外部内容和XML规则引用了这些算法。 write()方法,脚本处理等。

即使指定了defer属性,也可以指定async属性,以使仅支持defer(而不支持async)的旧版Web浏览器回退改为defer行为,而不是默认的阻止行为。

答案 4 :(得分:2)

似乎它不一定是async=async,而只是async

来自谷歌:

  

第二种技术是使用属性where   适当的,这可以防止解析阻止初始页面   通过延迟加载直到浏览器的UI线程不忙   别的什么。

https://developers.google.com/speed/docs/best-practices/mobile#DeferParsingJS

答案 5 :(得分:1)

足够异步。

您可以尝试两者,然后测量页面速度的差异。就像crictime使用单一物质一样。