@async脚本是否会在解析器遇到标记之前运行?

时间:2012-12-14 06:15:54

标签: javascript html performance asynchronous

这就是我的意思。请看以下示例:

<!doctype html>
<html>
  <head><title>test page</title></head>
  <body>
     Will this always be the first thing on the screen every time?
     <script>document.write('Will this be 2nd?');</script>
     <script async src="http://foo.bar/baz.js"></script>
  </body>
</html>

...其中baz.js由以下内容组成:

var s = document.createElement('span');
s.innerHTML = 'Is there any possibility that this will be the first thing to appear on the screen whatsoever, like it\'s being loaded over a really badass fiber optic connection?';
document.body.appendChild(s);

我问,因为我的脚本依赖于页面上已存在的body元素供我附加,但是我不控制页面上我的标记插入的位置,而不是我知道它的事实将在身体的某个地方。 是否有浏览器在asyncdefer脚本的标记上进行扫描,然后才开始进行主要的解析,以查看是否有任何事先应该开始下载? < / p>

如果问题不够明确,请告诉我,我会尽力澄清。

由于

1 个答案:

答案 0 :(得分:1)

在解析器到达之前,script元素不会被操作。

您的"Will this be 2nd?"脚本将始终在另一个脚本之前运行。

在这两种情况下,您都可以依赖document.body

More reading有关asyncdefer的详细信息。