<script>标签中defer与async的区别

637 阅读1分钟

每天做个总结吧,坚持就是胜利!

    /**
        @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属性有以下两个区别:

  1. 使用defer属性的异步加载标签,会在浏览器渲染完成后再执行,而async是下载完立即执行;
  2. 多个开启defer属性的标签可以保证加载顺序,而async无法保证加载顺序;

肆(引申)

上面提到了脚本下载时间过长,会造成浏览器阻塞,此时会造成页面白屏问题;所以尽量将script标签放置在body标签后面,避免阻塞。