HTML script 简体中文

文章正文
发布时间:2025-06-29 05:06

使用 async 属性加载的脚本将在获取脚本时下载脚本而不会阻止页面。但是,开荒保洁13825404095一旦下载完成,脚本就会执行,从而阻止页面呈现。这意味着在脚本执行完成之前,网页上的其余内容将无法处理并显示给用户。您无法保证脚本会按任何特定顺序运行。当页面中的脚本彼此独立运行且不依赖于页面上的其他脚本时,最好使用 async 。

使用 defer 属性加载的脚本将按照它们在页面上出现的顺序加载。它们在页面内容全部加载后才会运行,如果您的脚本依赖于 DOM(例如,它们修改页面上的一个或多个元素),这将非常有用。

以下是不同脚本加载方法的直观表示以及它们对您的页面的意义:

How the three script loading method work: default has parsing blocked while JavaScript is fetched and executed. With async, the parsing pauses for execution only. With defer, parsing isn't paused, but execution on happens after everything is else is parsed.

该图像来自 HTML spec ,根据 CC BY 4.0 许可条款复制并裁剪为缩小版本。

例如,如果您有以下脚本元素:

html

<script async src="js/vendor/jquery.js"></script> <script async src="js/script2.js"></script> <script async src="js/script3.js"></script>

您不能依赖脚本的加载顺序。 jquery.js 可能在 script2.js 和 script3.js 之前或之后加载,如果是这种情况,则这些脚本中依赖于 jquery 的任何函数都会产生错误,因为 jquery 不会在脚本运行时定义。

当您需要加载大量后台脚本,并且只想尽快将它们放置到位时,应该使用 async 。例如,也许您需要加载一些游戏数据文件,这些文件在游戏真正开始时会用到,但现在您只想继续显示游戏简介、标题和大厅,而不想让它们被脚本加载所阻碍。

使用 defer 属性加载的脚本(见下文)将按照它们在页面中出现的顺序运行,并在脚本和内容下载后立即执行它们:

html

<script defer src="js/vendor/jquery.js"></script> <script defer src="js/script2.js"></script> <script defer src="js/script3.js"></script>

在第二个示例中,我们可以确定 jquery.js 将在 script2.js 和 script3.js 之前加载,而 script2.js 将在 script3.js 之前加载。它们在页面内容全部加载之前不会运行,如果您的脚本依赖于 DOM 到位(例如,它们修改页面上的一个或多个元素),这很有用。

To summarize:

async 和 defer 都指示浏览器在单独的线程中下载脚本,同时下载页面的其余部分(DOM 等),因此在获取过程中不会阻止页面加载。

具有 async 属性的脚本将在下载完成后立即执行。这会阻塞页面,并且不保证任何特定的执行顺序。

具有 defer 属性的脚本将按其所在的顺序加载,并且只有在所有内容加载完成后才会执行。

如果您的脚本应该立即运行并且它们没有任何依赖关系,那么请使用 async 。

如果您的脚本需要等待解析并且依赖于其他脚本和/或 DOM,请使用 defer 加载它们并按照您希望浏览器执行的顺序放置它们相应的 <script> 元素。