答案 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)
这只是意味着
Here's一个很好的例子。
注意:此属性仅适用于外部脚本(具有src属性的脚本),而不适用于内联脚本。
答案 3 :(得分:3)
HTML WHATWG specification包含the following explanation:
对于classic scripts,如果存在
async
属性,则 经典脚本将与解析并行获取并评估为 尽快可用(可能在解析完成之前)。如果async
属性不存在,但defer
属性存在, 那么经典脚本将被并行获取并在 页面已完成解析。如果两个属性都不存在,则 立即获取并评估脚本,从而阻止了解析 直到全部完成。对于module scripts,如果存在
async
属性,则模块 脚本及其所有依赖项将以并行方式获取 解析,并且模块脚本将在评估后立即评估 可用(可能在解析完成之前)。否则, 模块脚本及其依赖项将与 页面完成解析后进行解析和评估。 (defer
属性对模块脚本没有影响。)下面的示意图总结了这些内容:
由于大多数历史原因,这些属性的确切处理细节有些琐碎,涉及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使用单一物质一样。