每天做个总结吧,坚持就是胜利!
/**
@date 2021-05-22
@description script标签的defer属性与async属性的区别
*/
壹(序)
浏览器在遇到script标签时,会停止渲染,开始执行脚本,如果是外部脚本,还需要进行下载,等待脚本执行完成后再重新开始向下渲染。如果脚本下载与执行时间过长,会造成浏览器阻塞,这无疑是一种很不好的用户体验,所以浏览器允许script标签异步加载脚本,defer与async就是两种异步加载脚本的方法。浏览器在遇到带有defer或者async属性的script标签时,会开始下载脚本,但是不会等待下载完成和执行完成,而是执行后续代码。
贰(使用)
在script标签中打开defer或async属性便可异步加载脚本:
<script src="a.js" defer></script>
<script src="b.js" async></script>
叁(区别)
defer与async属性有以下两个区别:
- 使用defer属性的异步加载标签,会在浏览器渲染完成后再执行,而async是下载完立即执行;
- 多个开启defer属性的标签可以保证加载顺序,而async无法保证加载顺序;
肆(引申)
上面提到了脚本下载时间过长,会造成浏览器阻塞,此时会造成页面白屏问题;所以尽量将script标签放置在body标签后面,避免阻塞。