是顺序或并行加载的外部JavaScript文件?

时间:2011-11-17 09:50:44

标签: 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>

我可以依赖这样一个事实:当加载后者的代码时,前代的代码已经可用了吗?

4 个答案:

答案 0 :(得分:8)

它们可以并行加载(通过网络),但它们会按顺序进行评估。

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

答案 1 :(得分:6)

简短:是的:

在脚本标记中没有指定deferasync属性,规范说,浏览器必须按顺序(同步)加载这些文件。

换句话说,浏览器发现需要获取的普通脚本标记

  • 装载
  • 执行
  • (在执行上述操作时阻止任何其他渲染/执行过程)

虽然“现代”浏览器可能仍然试图优化该过程,但需要应用这些步骤(至少类似于流程)。这就是为什么您应该在<body>标记的底部放置脚本标记而不进一步指定的原因。在加载/执行脚本时,甚至DOM渲染过程也会停止。

为避免这种情况,您可以在这些脚本代码中指定deferasync(仅限HTML5)属性,例如

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

告诉浏览器它是一个脚本,意味着在解析文档后执行。

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

答案 2 :(得分:6)

通常,脚本会按顺序下载(请参阅this page):

  

因为JavaScript代码可以改变Web的内容和布局   页面,浏览器延迟呈现脚本后面的任何内容   标记,直到该脚本已被下载,解析和执行。   但是,更重要的是,对于往返时间,许多浏览器会阻止   下载资源[例如样式表,图像和其他脚本]   脚本之后在文档中引用,直到这些脚本为止   下载并执行。

答案 3 :(得分:4)

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