script 标签里的 async 和 defer

时间:2021-02-12 00:06:06
  • 无 async 和 defer

    浏览器立即加载并执行指定脚本(读到即加载并执行),阻塞文档解析

  • async

    脚本的加载执行和文档的加载渲染 并行。

  • defer

    脚本的加载和文档的加载渲染并行,但脚本的执行必须在所有元素解析完成之后进行,即DOMContentLoaded事件触发之前完成。

执行顺序图示

script 标签里的 async 和 defer
script 标签里的 async 和 defer

notice
  • defer和async在网络读取(下载)阶段是一样的,和HTML解析都是并行(异步)
  • async
    是无序执行,它的执行紧跟着下载,只要下载完了就立即执行(不考虑脚本的依赖关系,对于那些没有依赖关系的脚本来说是非常合适的),执行时同样阻塞HTML解析。
  • defer
    是有序执行,会按照他们在页面上的顺序依次执行,在HTML解析完成之后,DOMContentLoaded事件之前执行。

相关文章