JavaScript中async与defer属性的区别

async与defer的区别

从上面这张图可以发现:

  • <script src="script.js"></script>
    浏览器在读到 script标签后,就开始加载、执行script标签中的代码,此时html解析暂停。
  • <script defer src="script.js"></script>
    脚本加载和html文档解析是并行进行的,但是script脚本的执行是在html解析完成后,DOMContentLoaded事件触发之前开始的。
    在浏览器加载并解析完html文档(样式表、图片、子窗口可能还没有加载完成),会触发DOMContentLoaded事件。
  • <script async src="myscript.js"></script>
    script脚本和html解析同步执行,并且script脚本在加载完成后立即执行,在脚本执行的这段时间内浏览器不会解析html文档。