其中蓝色线代表 JavaScript 加载;红色线代表 JavaScript 执行;绿色线代表 HTML 解析。
async
async 属性表示异步执行引入的 JavaScript,如果已经加载好,就会开始执行,这种方式加载的 JavaScript 依然会阻塞 HTML 解析
defer
表示延迟执行引入的 JavaScript,即这段 JavaScript 加载时 HTML 并未停止解析,这两个过程是并行的。等 HTML 渲染完成后才依次执行 javascript
从上图可以看出,defer 和 async 的相同点是都会异步加载 javascript 脚本,区别是在于 defer 会延迟执行脚本,而 async 加载完就立即执行且会阻塞 HTML 解析
在加载多个 JS 脚本的时候,async 是无顺序的加载,而 defer 是有顺序的加载