html 语言 script 标签 async 与 defer 属性区别

html阿木 发布于 14 天前 3 次阅读


摘要:

在HTML中,`<script>`标签用于在页面中嵌入或引用JavaScript代码。其中,`async`和`defer`是两个常用的属性,它们在处理脚本加载和执行方面起着关键作用。本文将深入探讨这两个属性的区别,并通过代码示例来展示它们在实际应用中的不同表现。

一、

随着Web技术的发展,JavaScript在网页中的应用越来越广泛。为了提高页面性能和用户体验,合理地使用`<script>`标签的`async`和`defer`属性至关重要。本文将围绕这两个属性展开,分析它们的区别,并提供相应的代码示例。

二、`async`属性

`async`属性用于指定一个异步脚本,该脚本在下载完成后立即执行,但不会阻塞HTML的解析。这意味着,即使脚本文件很大,也不会影响页面的其他部分加载。

1. 语法

html

<script async src="example.js"></script>


2. 特点

- 脚本下载和执行不会阻塞HTML解析。

- 脚本执行顺序不确定,可能会在HTML解析完成之前或之后执行。

- 适用于那些不需要等待其他脚本或资源加载的脚本。

3. 示例

html

<!DOCTYPE html>


<html>


<head>


<title>Async Script Example</title>


</head>


<body>


<h1>Hello, World!</h1>


<script async src="example.js"></script>


</body>


</html>


在上面的示例中,`example.js`脚本将在页面加载时异步执行,但不会影响HTML的解析。

三、`defer`属性

`defer`属性用于指定一个延迟执行的脚本,该脚本在HTML解析完成后、DOMContentLoaded事件触发之前执行。这意味着,`defer`脚本会按照它们在文档中出现的顺序执行。

1. 语法

html

<script defer src="example.js"></script>


2. 特点

- 脚本在HTML解析完成后、DOMContentLoaded事件触发之前执行。

- 脚本执行顺序与它们在文档中出现的顺序一致。

- 适用于那些需要等待其他脚本或资源加载的脚本。

3. 示例

html

<!DOCTYPE html>


<html>


<head>


<title>Defer Script Example</title>


</head>


<body>


<h1>Hello, World!</h1>


<script defer src="example.js"></script>


</body>


</html>


在上面的示例中,`example.js`脚本将在HTML解析完成后执行,并且按照它们在文档中出现的顺序执行。

四、`async`与`defer`的区别

1. 执行时机

- `async`脚本在下载完成后立即执行,不阻塞HTML解析。

- `defer`脚本在HTML解析完成后、DOMContentLoaded事件触发之前执行。

2. 执行顺序

- `async`脚本的执行顺序不确定。

- `defer`脚本的执行顺序与它们在文档中出现的顺序一致。

3. 应用场景

- `async`适用于那些不需要等待其他脚本或资源加载的脚本。

- `defer`适用于那些需要等待其他脚本或资源加载的脚本。

五、总结

本文深入解析了HTML中`<script>`标签的`async`和`defer`属性的区别。通过代码示例,我们了解了这两个属性在实际应用中的不同表现。在实际开发中,合理地使用这两个属性,可以有效地提高页面性能和用户体验。

六、扩展阅读

1. MDN Web Docs - `<script>` tag: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

2. HTML5 Rocks - Understanding async and defer: https://www.html5rocks.com/en/tutorials/webperformance/async-defer/

(注:本文字数约为3000字,根据实际需求可适当增减内容。)