script 标签中,async 和 defer 两个属性有什么用途和区别?

在HTML中,script标签的async和defer属性用于异步加载JavaScript文件,不阻塞DOM渲染。defer保证脚本按顺序执行,而async不保证执行顺序,只确保脚本下载时不阻塞页面。这两个属性能优化页面加载性能,避免因脚本延迟导致的白屏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 HTML 中会遇到以下三类 script:

<script src='xxx'></script>
<script src='xxx' async></script>
<script src='xxx' defer></script>

script标签用于加载脚本与执行脚本,直接使用script脚本时,html会按照顺序来加载并执行脚本,在脚本加载&执行的过程中,会阻塞后续的DOM渲染。

比如现在大家习惯于在页面中引用各种第三方脚本,但如果第三方服务商出现了一些小问题,比如延迟之类的,就会使得页面白屏。

针对上述情况,script标签提供了两种方式来解决问题,就是加入属性async以及defer这两个属性使得script标签加载都不会阻塞DOM的渲染。

defer:此布尔属性被设置为向浏览器指示脚本在文档被解析后执行。
async:设置此布尔属性,以指示浏览器如果可能的话,应异步执行脚本。

defer

如果script标签设置了defer属性,则浏览器会异步下载该文件并且不会影响后续DOM的渲染。
如果有多个设置了defer属性的script标签存在,则会按照顺序执行所有的script,defer脚本会在文档渲染完毕后,DOMContentLoaded事件调用前执行。

async

async属性会使得script脚本异步的加载并在允许的情况下执行,而async的执行并不会按照script标签在页面中的顺序来执行,而是谁先加载完谁先执行。


async 和 defer是用于异步加载JavaScript文件的属性。区别有:

  • async属性:异步加载JavaScript文件,不会堵塞页面的渲染和加载,但是会在下载完成后立即执行脚本。如果多个脚本都使用了async属性,那么它们的执行顺序是不确定的。
  • defer属性:异步加载JavaScript文件,不会阻塞页面的渲染和加载,但是会在页面解析完毕后按照顺序执行脚本。如果多个脚本都使用了defer属性,那么它们的执行顺序是按照它们在页面中出现的顺序执行的。

所以,如果需要确保脚本按照顺序执行,可以使用defer属性;如果不需要考虑执行顺序,可以使用async。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏兮颜☆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值