script 标签里的 async 和 defer

  • 无 async 和 defer

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

  • async

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

  • defer

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

   执行顺序图示


QQ截图20170112161753.png

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