现代浏览器是并行还是按顺序加载脚本?

时间:2012-08-25 13:25:20

标签: javascript loading modernizr

我正在评估用于脚本加载优化的现有资源,但我在一些文章(例如this)中提到,指的是较旧的浏览器会阻止其他下载,直到此顺序脚本加载阶段完成为止。我检查Modernizr(yepnope.js),headjs和ControlJs作为候选人。但是,它是否需要在现代浏览器中使用此工具进行并行脚本加载?

2 个答案:

答案 0 :(得分:18)

我相信默认情况下,今天大多数浏览器实际上会并行加载脚本;但浏览器默认情况下不会并行执行脚本。例如,在以下代码中,脚本将并行加载。在图像中我们可以看到Fast1.js和Fast2.js加载速度非常快,但根据浏览器控制台中的时间,Fast2.js在Fast1.js执行后执行3秒。

另外,要记住的其他事情是文件的顺序可能会有所不同。 Backbone.js文件取决于underscore.js文件。如果我们更改了这些文件的顺序,其中bacbone.js位于underscore.js之前,则会引发错误。

<html >
<head>
    <title></title>
    <script src="scripts/fast1.js" type="text/javascript"></script>
    <script src="scripts/libs/jquery-1.8.3.js" type="text/javascript"></script>
    <script src="scripts/libs/underscore.js" type="text/javascript"></script>
    <script src="scripts/libs/backbone.js" type="text/javascript"></script>
    <script src="scripts/fast2.js" type="text/javascript"></script>
</head>
<body>
    Hello
    <script type="text/javascript">
        console.log("html:   " + Date());
    </script>
    <img src="imgs/bImg.png" />
</body>
</html>

以下是JavaScript文件Fast1.js和Fast2.js的代码

console.log("Fast 1: " + Date())

Script file loading in browser

对于脚本加载,我使用Require.js。它还提供了将代码组织到单个文件中的模块的好处。

这是我在浏览器脚本加载时创建的博文:Browser Script Loading

以下是一些关于脚本加载的文章:

答案 1 :(得分:2)

大多数浏览器按顺序加载它们。但是,您可以在async标记上添加script属性,以使其加载方式不同。

MDN解释了script标记的功能。

https://developer.mozilla.org/en-US/docs/HTML/Element/Script