JS | defer和async的区别

19 篇文章 4 订阅
8 篇文章 1 订阅

script标签,属性defer和async的区别。

表格比较

deferasync仅在使用外部脚本时有效

属性

作用

无属性

我们正常使用不添加任何属性时,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。

defer

使用defer时,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但是 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成(并不是加载完成就立即执行)。

async

使用async时,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。即在不影响后续文档元素渲染的情况下,加载js,加载完成后立即执行。

defer&async

同时使用defer和async时,如果浏览器支持async则按async解析;如果不支持,则按defer解析。

注意:从实用角度来说呢,首先把所有脚本都丢到 </body> 之前是最佳实践,因为对于旧浏览器来说这是唯一的优化选择,此法可保证非脚本的其他一切元素能够以最快的速度得到加载和解析。

图片示意

此图主要告诉我们以下几点:

  1. deferasync在网络读取(下载)这块儿是一样的,都是异步的(相较于HTML解析)。
  2. 它俩的差别在于脚本下载完之后何时执行,显然defer是最接近我们对于应用脚本加载和执行的要求的。
  3. 关于 defer,此图未尽之处在于它是按照加载顺序执行脚本的,这一点要善加利用。
  4. async则是一个乱序执行的主,反正对它来说脚本的加载和执行是紧紧挨着的,所以不管你声明的顺序如何,只要它加载完了就会立刻执行仔细想想,async对于应用脚本的用处不大,因为它完全不考虑依赖(哪怕是最低级的顺序执行),不过它对于那些可以不依赖任何脚本或不被任何脚本依赖的脚本来说却是非常合适的,最典型的例子:Google Analytics
归纳总结
  • 二者都是异步去加载外部JS文件
  • async是在外部JS加载完成后,浏览器空闲时,Load事件触发前执行。而defer是在JS加载完成后,整个文档解析完成后执行。
  • defer更像是将<script>标签放在</body>之后的效果,但是它由于是异步加载JS文件,所以可以节省时间。

总之,defer和async的主要区别在于它们的执行顺序和时机。‌

defer:‌这种属性允许脚本在文档解析完成后执行。‌当浏览器遇到带有defer属性的脚本时,‌它会等待整个页面的DOM解析完成后再开始下载脚本,‌确保在执行脚本之前页面已经完全准备好。‌这种属性有助于减少因页面未完全加载而引发的错误,‌特别是在依赖外部资源的第三方脚本中,‌使用defer可以提高应用的稳定性。‌此外,‌如果有多个defer脚本,‌它们会按照在页面中出现的顺序加载。‌

async:‌这种属性意味着脚本会异步下载,‌一旦下载完成,‌渲染引擎会中断渲染来执行脚本,‌然后再继续渲染。‌当浏览器遇到带有async属性的资源时,‌它会立即开始下载该资源,‌同时继续加载页面,‌避免了由于同步执行而导致的页面加载阻塞问题。‌然而,‌由于async并不保证具体的执行时间,‌如果在async代码中修改了DOM,‌特别是在依赖外部资源的场景下,‌可能会出现错误。‌此外,‌多个async脚本的执行顺序不能保证,‌因为它们可能以任意顺序完成下载和执行。‌

总的来说,‌defer适合于需要确保页面加载完成后才执行的脚本,‌以减少因页面未完全加载而导致的错误;‌而async则更适合于不需要等待页面完整加载即可运行的第三方脚本,‌提供了更高的灵活性,‌但可能伴随着一定的执行时机的不确定性。

 参考资料

两张图搞定前端面试特别常重要的知识点:defer和async的区别 - 简书

HTML标签中defer和async的详细对比与应用场景解析 | async与defer的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

儒雅的烤地瓜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值