defer 和 async 区别

诞生

默认情况下,浏览器是同步加载 JavaScript 脚本,即引擎遇到脚本就会停下来,若是外部脚本还需要等待下载完成,再执行,最后继续向下渲染页面。所以在早期都默认将脚本放在 body 的最下方。

在等待脚本下载及执行的过程,导致浏览器阻塞无响应,会带来不好的体验,所以就产生了异步加载脚本的方式。

区别

1. defer

defer 会等到文档完成解析后,才会执行。

defer 执行顺序固定,根据页面中顺序执行。

defer 属性对模块脚本没有作用 —— 他们默认 defer。

2. async

async 一旦下载完成,渲染引擎就会中断渲染,执行这个脚本之后再继续渲染。

async 执行顺序不固定,看谁先下载完了。

最后更新时间: 1 年前