诞生
默认情况下,浏览器是同步加载 JavaScript 脚本,即引擎遇到脚本就会停下来,若是外部脚本还需要等待下载完成,再执行,最后继续向下渲染页面。所以在早期都默认将脚本放在 body
的最下方。
在等待脚本下载及执行的过程,导致浏览器阻塞无响应,会带来不好的体验,所以就产生了异步加载脚本的方式。
区别
1. defer
defer
会等到文档完成解析后,才会执行。
defer
执行顺序固定,根据页面中顺序执行。
defer
属性对模块脚本没有作用 —— 他们默认 defer。
2. async
async
一旦下载完成,渲染引擎就会中断渲染,执行这个脚本之后再继续渲染。
async
执行顺序不固定,看谁先下载完了。