【青训营】- Script标签中async和defer属性总结

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 【青训营】- Script标签中async和defer属性总结

这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战

本文是笔者在参加字节跳动第一届前端青训营进阶班的学习笔记。

为什么需要async和defer?

在进行详细介绍async和defer的区别之前,我们先讲讲为什么需要这两个属性,请看下面的例子,假如资源1需要加载很久才能完成,但是资源2很快就可以完成,此时用户需要等待很久才能看到页面,造成用户体验不好,所以我们需要一个推迟加载资源1的方法,这就是async和defer诞生的原因。

<script src="资源1.js"></script>
<script src="资源2.js"></script>
复制代码
  • 解决上述问题的方法

让第二个文件推迟执行,也就是说添加defer属性。

<script src="资源1.js" defer></script>
复制代码

async和defer的区别

1. 不含async也不含defer

此时执行顺序是同步的,也就是按照定义的顺序,谁在上面谁先执行,执行完一个在执行下一个。这是script标签在body底部的情况,如果在head中定义则会阻塞HTML的解析,请看下图。JS脚本的加载和执行会阻塞DOM的渲染。

2. 只含async

立即下载,不影响其他操作,等下载完成之后在暂停HTML解析然后执行脚本。(加载完成后会立即执行)

3. 只含defer

立即下载,但是在Html解析和script加载完之后在执行defer属性标记的脚本。

async和defer的相同之处

  • 都是异步加载。
  • 都不影响DOM解析和其他资源的加载。

执行步骤图示

如果你想对这两个属性进行测试,可以尝试使用node创建一个服务器,然后通过延迟返回来测试输出的顺序。

参考资料

相关文章
|
1月前
|
监控 JavaScript 前端开发
确定使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript
【10月更文挑战第24天】选择使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript 是一个需要综合考虑多个因素的决策。需要根据脚本之间的依赖关系、页面加载性能要求、脚本的功能和重要性等因素来进行权衡。在实际应用中,需要通过测试和验证来确定最适合的加载方式,以提供更好的用户体验和页面性能。
|
3月前
|
JavaScript 前端开发 Go
async 和 defer的作用与区别
async 和 defer的作用与区别
|
7月前
|
JavaScript 前端开发 Go
理解 <script> 标签的 defer 和 async 属性
理解 <script> 标签的 defer 和 async 属性
165 3
|
Web App开发 移动开发 JavaScript
面试官:说一下script 标签中 defer(推迟) 和 async(异步) 的区别
面试官:说一下script 标签中 defer(推迟) 和 async(异步) 的区别
121 0
|
7月前
|
JavaScript 前端开发 开发者
7个Js async/await高级用法
7个Js async/await高级用法
136 0
|
7月前
|
JavaScript 前端开发 Go
<script> 标签的 defer 和 asnyc 属性的作用以及二者的区别
<script> 标签的 defer 和 asnyc 属性的作用以及二者的区别
77 0
|
前端开发 JavaScript Go
script标签中async和defer的作用和区别?简述css盒模型?什么是闭包?
浏览器遇到script标签没有async和defer属性时,页面将会暂停解析来下载并执行script脚本,执行完毕继续解析页面(这样会阻塞页面,所以建议把script标签放在html底部)。
script标签中async和defer的作用和区别?简述css盒模型?什么是闭包?
|
移动开发 Go UED
<script> 标签上的 defer 和 async 属性是什么?
它会执行以下步骤 1.暂停 HTML 文档解析器 2.创建新请求以下载脚本 3.在脚本完全下载后立即执行脚本 4.执行结束后,继续解析 HTML 文档
|
Go API
script标签中defer和async有什么不同?
script标签中defer和async有什么不同?
109 0
script标签中defer和async有什么不同?