2013-03-16 48 views
1

例如,如果我写了包含一个链接到的JavaScript,而这花费了1秒钟加载第三方下面的代码:当内联JavaScript正在执行时,Web浏览器是否保持在Web服务器连接?

<!DOCTYPE> 
<html> 
<head> 

</head> 
<body> 

    // note no async attribute! 
    <script src="//thirdparty.com/some/slow/loading/script.js"> 
    </script> 

</body> 
</html> 

请问HTTP连接到我的网络服务器保持打开状态,直到的的结束文件?

更新: 我不是在Connection:Keep-alive的背景下说话,这显然会在页面加载后保留连接。我指的是浏览器可能没有完全从服务器读取文档的内容,因为它会执行内嵌的JavaScript,所以它仍然保留其连接以继续阅读文件的其余部分,或者这将被读取,但尚未添加到DOM?

+0

取决于浏览器,但大多数是'Connection:Keep-Alive' – Bergi 2013-03-16 19:42:53

+0

您似乎认为浏览器一次只下载一行HTML文件,遇到脚本标记时它会暂停下载HTML文件,开始下载脚本。事实并非如此。它下载HTML文件,解析它,然后下载资源(实际上)始终是异步的。它只是同步执行它们,除非另有指示。 – JJJ 2013-03-16 19:45:31

+0

@Juhana我不假设,我问这个问题没有假设。 – 3urdoch 2013-03-16 19:46:25

回答

1

不,在文档完全解析之前,连接不会保持打开状态。

文档将在解析时继续加载,而外部脚本被请求,加载,解析和执行。浏览器在阅读文档时不会暂停,因为它现在不需要更多的数据来解析,或者因为它正在加载其他内容。它仍将继续在后台加载文档。

开放连接比内存更昂贵,所以浏览器最好尽可能快地将所有数据读入内存,而不是保持连接打开,以便在需要数据时读取它们。

0

浏览器将首先开始加载您的文档。只要它解析了<script>标签,它就会连接到第三方服务器并开始从那里加载JS。主页面加载完成后,您的服务器连接将会关闭。但是,只要加载了某些内容(例如JS),浏览器就会显示加载图标,并且在加载完所有内容后它还会调用window.onload

相关问题