下载javascript会阻止浏览器下载其他资源吗?

时间:2014-03-24 13:53:25

标签: javascript html browser web

我正在阅读“高性能网站”,在第6章中,作者写了关于下载脚本如何阻止其他下载的文章,因此,最佳做法是将所有脚本放在文档的末尾。

我在Chrome中加载了一个随机页面,从开发人员工具中,我看到几个js并行下载。这里发生了什么?现代浏览器是否已经发展,限制不再存在?或者我错过了什么?

P.S。我仍然不太明白浏览器在加载页面时如何下载/解析html / javascript / css。是否有任何好的博客文章/资源解释一般原则?

+++++++ EDIT ++++++

从书中引用:

  

在下载脚本时实际上禁用了并行下载,浏览器不会   即使在不同的主机名上,也可以启动任何其他下载。此行为的一个原因是脚本可能使用document.write来更改页面内容,因此浏览器会等待确保页面布局正确。

我的Chrome开发工具: My Chrome devtools

4 个答案:

答案 0 :(得分:5)

重新安排资源的加载有两个不同的原因;实际装载时间和明显装载时间。

提前放置样式表链接意味着它将在页面内容加载时加载,因此浏览器在加载时不会显示内容。这使得页面看起来加载速度更快,即使总加载时间仍然相同。

如何加载脚本会影响实际加载时间,因为浏览器一次只能从每个主机请求有限数量的资源。如果浏览器从您的服务器加载多个脚本,可能会延迟加载某些图像。早期的浏览器一次只能有两个资源的限制,虽然最近的版本可能一次加载更多的资源,但仍然存在限制。

此外,尽管脚本将并行加载,但脚本的解析仍然是阻塞的。即使已经加载了下一个脚本,也不会在前一个脚本完成之前对其进行解析。

一些reosurces:
YAHOO! Best Practices for Speeding Up Your Web Site
UX Movement: Why You Should Place Style Sheets Before Scripts
Google Developers: Properly including stylesheets and scripts

编辑:

本书所说的已经过时,现代浏览器有预加载器,允许在使用它们的代码被解析之前加载资源。

关于预装载者:
How the Browser Pre-loader Makes Pages Load Faster

答案 1 :(得分:1)

是和否。

<脚本>标签会阻止。

脚本标记还有一个ASYNC属性。

有许多方法可以异步添加脚本。这是我的最爱:

document.createElement('script');
script.src = url;
getElementsByTagName('head')[0].appendChild(script);

答案 2 :(得分:1)

您可以参考此页taligarsiel

将脚本文件放在页面末尾并将CSS放在头脑中总是很好的做法。

一旦浏览器显示您的页面,浏览器首先会将您的CSS呈现在页面中以显示页面。

答案 3 :(得分:1)

构建网站以提高性能时,始终需要考虑下载量。有些javascripts很小,很容易获得,有些可能很大或者有滞后或有其他内置细节,有时需要更长时间下载,并且可能妨碍其他资源的下载并且性能非常显着。

在页面末尾加载javascripts和jqueries的一个原因是为了确保在运行脚本之前所有必需的资源都可用。 (如果搜索资源在尝试运行时丢失,某些脚本甚至会中断)在某些情况下,它还可以允许其他资源以较少的干扰加载,并允许访问者在javascript加载并在后台运行时阅读或查看内容

但是有些情况下脚本必须在头部,但如果没有,最好在底部。