外部javascript文件是顺序加载还是并行加载

are external javascript files loaded sequentially or parallel?

本文关键字:加载 并行 javascript 顺序 外部 文件      更新时间:2023-09-26

如果我的页面中有多个脚本标签,如:

    <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>

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

它们可以并行加载(通过网络),但它们是按顺序求值的。

所以,是的,你可以依赖顺序。

简写:Yes:

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

换句话说,浏览器找到的普通脚本标签需要得到

  • 执行
  • (在执行上述操作时阻塞任何其他渲染/执行进程)

虽然"现代"浏览器可能仍在尝试优化该过程,但需要应用这些步骤(至少,类似于过程)。这就是为什么你应该把脚本标签没有进一步的说明总是在你的<body>标签的底部。甚至DOM渲染进程在加载/执行脚本时也会停止。

为了避免这种情况,您可以在这些脚本标签中指定deferasync(仅限HTML5)属性,如
<script defer src="/foo/bar.js"></script>

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

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

一般来说,脚本是按顺序下载的(参见此页):

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

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