1

例如,如果我编写了以下代码,其中包含指向第 3 方 javascript 的链接,而加载需要 1 秒:

<!DOCTYPE>
<html>
<head>

</head>
<body>

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

</body>
</html>

到我的 Web 服务器的 http 连接是否会一直保持打开状态,直到文档结束?

更新:我不是在 Connection: Keep-alive 的上下文中谈论,这显然会在页面加载后保留连接。我指的是浏览器在执行内联javascript时可能尚未从服务器完全读取文档的内容,因此它是否仍会保留其连接以继续读取文件的其余部分,或者这是否已被读取但尚未添加到 DOM 中?

4

2 回答 2

1

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

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

打开连接是比内存更昂贵的资源,因此浏览器最好尽快将所有数据读入内存,而不是在需要数据时保持打开连接以从中读取数据。

于 2013-03-16T20:06:09.993 回答
0

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

于 2013-03-16T19:45:33.087 回答