【发布时间】:2015-06-17 16:37:57
【问题描述】:
我在 HEAD 部分有一个带有 script 标记的页面:
<script src="somescript.js" type="text/javascript" async></script>
由于它包含async 属性,它异步加载,浏览器解析页面而不等待下载此脚本。下载后,此脚本将异步执行,因此浏览器可以继续解析页面。
此脚本一旦下载,将执行一些操作并通过类似于以下内容动态插入另一个脚本:
var a = document.createElement('script');
a.type = 'text/javascript';
a.src = 'http://domain/otherscript.js';
var elem_body = document.getElementsByTagName('body')[0];
elem_body.appendChild(a);
这个新的动态插入脚本也将异步执行,浏览器可以继续执行其他操作,因此可以根据需要解析页面或执行其他脚本。
现在,我的理解是这个脚本,从头到尾执行不会以任何方式阻塞浏览器。它将加载、插入另一个脚本并完全异步执行。 DOMContentLoaded 事件完全不会变慢。
但是,这可能会延迟onload 事件的触发吗?在我看来,这个脚本将在页面几乎被解析时启动。然后它会请求其他脚本,onload 事件可能会被进一步延迟,等待最后一个脚本执行它。
我的理解正确吗?
编辑
在http://plnkr.co/edit/BCDPdgCjPeNUmLbf7wNR?p=preview 添加了测试 在 Chrome 中,它似乎确实延迟了 onload 事件
【问题讨论】:
-
如上所述,onload() 很可能会在 otherscript.js 执行之前触发,但一个简单的测试就足够了。
标签: javascript html dom