🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 正常的 script 标签 * script 代码是在 js 引擎中执行的,如果代码文件很大,那么就会阻塞渲染 * 脚本下载并且执行完之后,才会渲染页面 ![](https://img.kancloud.cn/bd/ea/bdeaafb234661e6c4fe533213d7f3c41_1640x326.png) ## async defer - 不会阻塞 dom 渲染 ### defer 1. 异步下载 js 文件 2. 多个设置了`defer`的`script`标签存在,则会按照顺序执行所有的`script`,前一个执行完才能执行下一个 3. `defer`脚本会在文档渲染完毕后,`DOMContentLoaded`事件调用前执行 ![](https://img.kancloud.cn/4a/b2/4ab2ebe815d85634fbd5ec89468b8309_1320x282.png) #### 适用场景 - 有顺序依赖的 ### async * 异步下载 js 文件 * 多个设置了 async,不会按照顺序执行,而是谁先完事谁执行 * **`DOMContentLoaded`** 不受 async 的影响,可能在js执行前,也可能在js执行后 ![](https://img.kancloud.cn/43/91/43914182339634dc1d512d8222a8a791_1310x264.png) ![](https://img.kancloud.cn/e1/2a/e12a9a81980039551b3ae62fcc63f8c5_880x168.png) #### 适用场景 - 没有脚本加载的顺序依赖,也不关心dom