注意:我没有开发此网站 - 我只需处理它。具有asyc属性的脚本仍然会阻止其他脚本执行
我有一个LAB.js文件,用于在头部异步加载一系列脚本。再往下,我还有两个外部脚本,一个在头部,另一个在身体顶部。
这两个脚本通常无法访问。它们都被标记为“异步”,并且不会阻止文档加载。但是 - 他们显然会阻止其他脚本执行。
要清楚的是,第一系列脚本会立即下载,但直到下载其他两个异步脚本才会执行。
该网站不公开,并且此类问题无法在jsfiddle中创建。粗插图:
<!doctype html>
<head>
<!-- This script asynchronously loads many others -->
<script src="/js/LAB.js"></script>
<script src="slow-server/js/slowscript1.js" async></script>
</head>
<body>
<script src="show-server/js/slowscript2.js" async></script>
</body>
信息上Lab.js:http://labjs.com/
实验室将在前面加上其他几个脚本标记的头部被异步加载。它们全部都是立即下载的,但是直到“慢速服务器”脚本响应才会执行。有时需要一段时间。这在我看来对于具有async属性的脚本来说是不正确的行为(并且我正在Chrome中测试)。有什么我失踪?
感谢您的详细描述。我唯一不完全理解的部分是其他脚本在获取两个异步脚本时被阻塞,而不是在执行时。在我最近的测试中,缓慢的服务器脚本花了3分钟的时间来响应和下载。其他脚本在整个时间内都未能执行。不过,我会试着推迟,看看它的行为是否有所不同。 – Dygerati
@Dygerati - 这里还有其他的东西在玩。浏览器会一次打开最大数量的连接,因此它会立即下载的最大数量的连接。所以,如果你有几个大的东西被下载(即使是异步),由于连接限制,一些非异步的东西可能会卡在它们后面。 – jfriend00
@Dygerati - 另外,请记住,一旦脚本被提取,它将在浏览器缓存中,并从那时起,可能几乎立即从浏览器缓存中加载。这可能会使其表现得几乎不像异步。异步适用于加载脚本的时间,因此如果它立即从浏览器缓存中加载,那么异步并没有太大的作用。也许你想“延迟”,而不是确保这些脚本不会被执行,直到DOM被解析并且任何非延迟的非异步脚本被运行。 – jfriend00