2011-11-17 74 views
7

如果我在我的网页一样多的脚本标签:是按顺序加载还是并行加载的外部JavaScript文件?

<script src="js/jquery-1.7.min.js" type="text/javascript"></script> 
    <script src="js/jquery.jplayer.min.js" type="text/javascript"></script> 
    <script src="js/globals.js" type="text/javascript"></script> 
    <script src="js/sound.js" type="text/javascript"></script> 

我可以依靠的事实,即从以前的代码是后一类被加载时已经可用?

+0

似乎值得一提的是,在下面的正确答案之上,脚本可以通过引入异步代码来“破坏”执行顺序。例如,如果第一个脚本包含一行'setTimeout(function(){alert(“Hello”);},0);',那么在其他脚本加载完成后会出现该警报。事实上,在整个HTML被加载之后。 –

回答

5

一般来说,脚本下载顺序(见this page):

因为JavaScript代码可以改变网页 页面的内容和布局,浏览器延迟渲染如下脚本 标签之前的任何内容该脚本已被下载,解析并执行。 然而,更重要的是往返时间,许多浏览器阻止 的下载文件中引用的资源[如样式表,图片和其他脚本] 的脚本后,直到这些脚本是 下载并执行。

+1

+1。 – Thilo

+0

“许多浏览器阻止下载资源,直到脚本执行完毕”:我认为很多新近的浏览器都会预取其他资源,尽管(假设不管脚本的结果如何,他们最终都会被需要)。 – Thilo

3

它们并行加载,但它们只在每个文件加载完成后才运行。 所以答案是肯定的,你可以依靠这个事实。

5

短:是:

,而无需脚本标签中指定deferasync性质,规范说,该浏览器有顺序(同步)加载这些文件。

换句话说,其中浏览器发现需要一个普通的脚本标签以获得

  • 加载
  • 执行
  • (方框任何其他呈现/执行过程,同时执行上述)

尽管“现代”浏览器可能仍在优化该流程,但这些步骤需要应用(至少,类似流程)。这就是为什么您应该放置脚本标签而无需进一步详细说明总是在<body>标签的底部。即使DOM渲染进程在加载/执行脚本时也会停止。

为了避免这种情况,你可以指定这些脚本标记一个deferasync(仅限HTML5)的财产,就像

<script defer src="/foo/bar.js"></script> 

,告诉浏览器,它是一个脚本这意味着该文件有后执行被解析。

参见https://developer.mozilla.org/En/HTML/Element/Script

7

它们可以并行地加载(通过网络),但它们在序列进行评估。

所以是的,你可以依靠订单。