如何加载和执行JavaScript文件?

如何加载和执行JavaScript文件?,javascript,execution,Javascript,Execution,我不经常看到关于JavaScript文件加载/执行顺序的讨论或研究。我对解释如何处理JavaScript的网站感兴趣。特别是,如果我有 <script src="a.js"></script> <script src="b.js"></script> <script src="c.js"></script> 我假设先下载a.js,然后是b.js,最后是c.js,还是同时下载?那执行呢?标题中的脚本是否优于正文中的脚本

我不经常看到关于JavaScript文件加载/执行顺序的讨论或研究。我对解释如何处理JavaScript的网站感兴趣。特别是,如果我有

<script src="a.js"></script>
<script src="b.js"></script>
<script src="c.js"></script>

我假设先下载a.js,然后是b.js,最后是c.js,还是同时下载?那执行呢?标题中的脚本是否优于正文中的脚本


我对这个主题如此感兴趣的主要原因是因为我正在编写一个JavaScript软件,该软件使用这些脚本的动态加载,有时会出现一些错误,比如x未定义(在其他脚本之前没有加载过),但通常不会发生这些错误。我不明白为什么。

脚本是并行下载的,但按照它们在HTML中出现的顺序进行解析和执行,在执行之前阻止页面上的其他操作(包括渲染)。如果脚本是由JavaScript代码通过DOM添加的,或者如果最新版本的Firefox中存在脚本,那么脚本可能是非阻塞的。

控制JavaScript下载的主要是您的浏览器。如果像上面所做的那样从同一个域加载它们,它们将一个接一个地加载,因此按照指定的顺序加载

作为一个简单的测试,您可以简单地尝试在每个文件上指定函数,并尝试从列表中的下一个文件调用它们,以便查看它们的加载顺序

关于加载的优先顺序,大多数网站优化书籍都会告诉你在最底层加载js文件,因为这将使你的页面加载更快,js文件将作为最后一个必要的资源加载。这需要小心,如果您的页面在加载时直接依赖JavaScript,那么最终可能会出现无休止的js错误

jquery之类的库在这方面会有很大帮助,因为一旦DOM可用,它们只允许js操作发生,因此在HTML底部加载js时不会出现js错误

另一件有趣的事情是,确保js文件适当缩小,并坚持文件数量最少,因为这样做,您只需要执行几个服务器请求,我将在更短的时间内让您的JavaScript随时可用


希望这能对你有所帮助。

在@Andy的答案上多加几点

在您的例子中,脚本文件是并行下载的,并按照对齐的顺序进行解析。这是浏览器的默认行为,因为您没有明确添加以下任何脚本属性

不太深入:

HTML5具有
标签的
延迟属性和
异步属性

  • 无属性-脚本加载将阻止DOM渲染,直到 下载并解析

  • 延迟
    -允许脚本文件下载并完成DOM 并行渲染。下载完成后,按顺序解析脚本 一切都安排好了

  • async
    -允许脚本文件下载并完成DOM 并行渲染。下载完成后,解析脚本 无需等待其他脚本即可立即执行


即使是
load也会阻止DOM呈现,但它没有defer/async。这里的概念进入画面

在代码中添加java脚本文件,就像在代码中包含javascript代码一样。(就像我们在php中需要或包含的一样)。而且,它将根据您基于事件调用的函数同时工作一些关于主题的好文章:和一个好的非阻塞解决方案:并行下载脚本,但是如果
c.js
b.js
a.js
之前下载
c.js
,浏览器将等待以前的脚本下载并执行
c.js