2016-04-26 123 views
0

根据MDN:脚本异步它是如何实际工作,以及何时使用它

异步......表明浏览器应该,如果可能的话,执行脚本异步

定义真的很含糊。因此,让我那句我认识明确,并请纠正我,如果我错了:

我的第一个问题的是,当我使用关键字异步加载第三方脚本,浏览器会后继续解析DOM元素在通过不同的线程下载脚本时的标签。我想知道浏览器实际上如何实现asychnoronous

我的解释是否正确?

我的第二个问题是什么时候使用async而不是defer? (我了解他们之间的差异,我只是不知道什么时候会使用一个而不是另一个)

假设我想包含的脚本没有任何依赖关系,它不依赖于通过其他脚本。为什么在这种情况下推荐使用async而不是defer而不是执行时间的差异?

+1

如果没有其他脚本取决于您的脚本,则使用异步;如果他们这样做,请使用延迟。 – Ioan

+0

让我们假设没有其他脚本取决于我将要包含的脚本。使用延迟有什么问题?这只是脚本的执行时间不同,但使用异步还有其他好处吗? – Cheng

+1

http://www.growingwiththeweb.com/2014/02/async-vs-defer-attributes.html可能会帮助 –

回答

0

这里的规范说什么:

https://www.w3.org/TR/html-markup/script.html#script.attrs.async

async指定脚本应该异步只要它可用来执行。

https://www.w3.org/TR/html-markup/script.html#script.attrs.defer

defer指定文档被解析后脚本应执行。

+0

我很欣赏你的链接,但我已经知道了不同之处。我想知道它们是如何在浏览器中实现的。它是什么意思是“异步执行”? – Cheng

+0

这意味着脚本不会按严格的顺序执行。如果您有一系列同步执行的命令,则先前的命令总是在后面的命令开始之前完成。一个'async'脚本在加载完成后会被执行,因此对于页面上的其他脚本,它的执行将会处于不可预知的时间。一种类比是点击事件。你不知道什么时候会发生,但你可以附上代码。该代码需要与当时还在发生什么的假设隔离。 –

+0

http://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean在这里可能很有帮助。 –

相关问题