JavaScript script标签中 async 和 defer 的作用

sync和defer

浏览器在加载、执行js文件时,会阻塞Dom元素的渲染,所以为了避免首屏白屏问题,一般将js文件放到body的最后,保证先渲染Dom元素,再加载执行js文件。

除了把js文件放到body的后面,也能把js文件放到header中,只要加上异步属性async或defer
在这里插入图片描述
绿色是GUI渲染线程(解析HTML文件,构建DOM树)
红色是JS引擎线程(解析js文件,执行代码)
因为GUI渲染线程和JS引擎线程互斥,所以两者不能并行

什么时候用async,什么时候用defer?

使用场景

注意事项
  1. 内置js代码的script标签,以及动态生成的script标签,defer属性不生效
  2. 有defer或async属性的script标签脚本文件里不能使用document.write方法
  3. 若同时使用async和defer,defer不起作用,async生效
参考文章
  1. https://www.cnblogs.com/gqymy/p/10473909.html
  2. https://segmentfault.com/a/1190000006778717
  3. https://segmentfault.com/q/1010000000640869
  4. https://blog.csdn.net/weixin_43967603/article/details/106309099
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值