<script> 标签上的 defer 和 async 属性是什么?

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 它会执行以下步骤1.暂停 HTML 文档解析器2.创建新请求以下载脚本3.在脚本完全下载后立即执行脚本4.执行结束后,继续解析 HTML 文档

当我们遇见script的时候

<script src="/path/to/script.js"></script>

它会执行以下步骤

1.暂停 HTML 文档解析器

2.创建新请求以下载脚本

3.在脚本完全下载后立即执行脚本

4.执行结束后,继续解析 HTML 文档


此流程提供了糟糕的用户体验,假如脚本下载时间过长,用户将无法与页面交互。在看到整个页面被解析之前,他们必须等待所有脚本被下载并完全执行。


为了解决这个问题,HTML5 为 script 标签提供了两个属性。它们是 async 和 defer

async

<script src="/path/to/script.js" async></script>

下载 async 脚本后,浏览器将暂停文档解析器,执行脚本并继续解析文档。

1.解析文档

2.下载脚本

3.暂停解析

4.执行脚本

5.恢复解析

defer

<script src="/path/to/script.js" defer></script>

只有当解析器完成其工作时,才会执行 defer 脚本。

1.解析文档

2.下载脚本

3.执行脚本

注意:这个过程文档是不会停止解析的

注意

注意:没有 src 属性的脚本(即不是内联脚本),async 和 defer 属性会被忽略。

相关文章
|
15天前
|
监控 JavaScript 前端开发
确定使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript
【10月更文挑战第24天】选择使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript 是一个需要综合考虑多个因素的决策。需要根据脚本之间的依赖关系、页面加载性能要求、脚本的功能和重要性等因素来进行权衡。在实际应用中,需要通过测试和验证来确定最适合的加载方式,以提供更好的用户体验和页面性能。
|
4月前
|
JavaScript
js 捕获 await 的报错
js 捕获 await 的报错
27 1
|
6月前
|
JavaScript 前端开发 Go
理解 <script> 标签的 defer 和 async 属性
理解 <script> 标签的 defer 和 async 属性
150 3
|
6月前
|
JavaScript 前端开发 Go
<script> 标签的 defer 和 asnyc 属性的作用以及二者的区别
<script> 标签的 defer 和 asnyc 属性的作用以及二者的区别
69 0
|
前端开发 JavaScript Go
script标签中async和defer的作用和区别?简述css盒模型?什么是闭包?
浏览器遇到script标签没有async和defer属性时,页面将会暂停解析来下载并执行script脚本,执行完毕继续解析页面(这样会阻塞页面,所以建议把script标签放在html底部)。
script标签中async和defer的作用和区别?简述css盒模型?什么是闭包?
|
Go API
script标签中defer和async有什么不同?
script标签中defer和async有什么不同?
106 0
script标签中defer和async有什么不同?
|
JavaScript Go
script标签中的defer与async
script标签中的defer与async
script标签中的defer与async
|
移动开发 小程序 Go
Async、defer以及普通加载script区别详解
如果用一张图片诠释这几种script加载的特点,应该是这样的:
169 0
Async、defer以及普通加载script区别详解