Html &引用;异步;用于<;脚本>;

Html &引用;异步;用于<;脚本>;,html,Html,文档中提到了async属性:“设置此布尔属性以指示浏览器应该异步执行脚本(如果可能)。”我认为即使没有此标记,所有外部脚本都是异步执行的。我错了吗 如果我声明了几个外部脚本,它们是同时下载还是逐个下载?他们将按什么顺序执行 对。默认情况下,脚本是阻塞的。HTML解析将停止,直到脚本完成执行为止(请注意,脚本发出的某些函数调用可能会异步处理,这些调用不会阻止进一步的呈现) 如果不是这样,那么: <script src="foo.js"></script> <p&g

文档中提到了async属性:“设置此布尔属性以指示浏览器应该异步执行脚本(如果可能)。”我认为即使没有此标记,所有外部脚本都是异步执行的。我错了吗

如果我声明了几个外部脚本,它们是同时下载还是逐个下载?他们将按什么顺序执行



对。默认情况下,脚本是阻塞的。HTML解析将停止,直到脚本完成执行为止(请注意,脚本发出的某些函数调用可能会异步处理,这些调用不会阻止进一步的呈现)

如果不是这样,那么:

<script src="foo.js"></script>
<p>Hello

可能会插入
fooHello
之后的某个时间,将code>导入HTML,因为脚本在执行之前需要时间下载。

需要立即解析脚本元素。如果它是一个内联脚本,一切正常,但如果它是一个外部资源,则需要先下载它

下载时,它会阻止页面呈现和其他下载。这就是为什么应该将脚本块放在body标记的末尾,以尽可能少地阻止其他进程

3个脚本是并行下载还是逐个下载取决于浏览器。现代浏览器同时执行多个http请求,因此具有更好的页面呈现时间。但是,不管是哪一个脚本先完成加载,执行顺序总是固定的——脚本按照它们在html标记中出现的顺序执行(在您的示例中:1.js->2.js->3.js)。因此,在源代码中最后出现的一个非常小的
.js
文件可能首先可用,但必须等待执行,才能下载并执行之前出现的所有其他源文件


这就是为什么他们引入了
async
——这基本上告诉浏览器:“执行顺序不重要,只要下载并在加载完成后执行,你就有一些空闲时间。”

@grade-编辑并没有改变我对您所问问题的理解。脚本是异步下载的,但同步执行的。因此,如果您下载脚本的服务器没有响应,它可能会在几秒钟内阻止渲染?@grade是的。现代浏览器做了很多事情来降低这个问题的严重性,但是在超时触发之前,你会阻止浏览器呈现你的页面。
<script src="foo.js"></script>
<p>Hello
document.write("foo!");