HTML之defer和async的区别

Q1:script标签的defer,async的区别

这两个元素在红包书的第二章中就有介绍,先看下来自书中的定义:
async:可选,表示应该立即下载脚本,不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本有效。
defer:可选,表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外文脚本有效。
了解了定义后。

解释一下就是defer和async都会让脚本异步加载,但是defer加载完脚本并不立即执行,而是等待后续文档渲染加载完毕后执行。ascync则是加载脚本立刻执行,在执行js脚本时会阻塞dom的渲染。

引用自defer和async的区别

最后回到这个问题,总结derfer,async的区别:

是否异步是否阻塞dom渲染
async是,async异步加载文档后立即执行,这时会阻塞dom渲染
defer否,待文档全部渲染完后才执行脚本。( script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成)

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

1、defer 和 async 在网络读取(下载)这块儿是一样的,都是异步的(相较于 HTML 解析)
它俩的差别在于脚本下载完之后何时执行
2、显然 defer 是最接近我们对于应用脚本加载和执行的要求的
3、关于 defer,此图未尽之处在于它是按照加载顺序执行脚本的,这一点要善加利用
4、async 则是一个乱序执行的主,反正对它来说脚本的加载和执行是紧紧挨着的,所以不管你声明的顺序如何,只要它加载完了就会立刻执行
5、仔细想想,async 对于应用脚本的用处不大,因为它完全不考虑依赖(哪怕是最低级的顺序执行),不过它对于那些可以不依赖任何脚本或不被任何脚本依赖的脚本来说却是非常合适的,最典型的例子:Google Analytics

当然,我们在开发中想要避免加载脚本阻塞页面渲染带来的白屏等性能问题,最稳妥的方式还是把script引入的外部脚本丢在html结构的尾部,避免了兼容问题,以及async存在的执行顺序问题。

文献:
浅谈defer和async
defer和async的区别

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值