异步加载 js

async 属性(仅适用于外部脚本)

  • 对于普通脚本,如果存在 async 属性,那么普通脚本会被并行请求,并尽快解析和执行
  • 对于模块脚本,如果存在 async 属性,那么脚本及其所有依赖都会在延缓队列中执行,因此它们会被并行请求,并尽快解析和执行。

该属性的脚本不会按照页面中的顺序来执行,而是谁先加载完成谁执行。意思就是,带有该属性的脚本会并行加载,并且加载完成后就执行,执行的时候会暂停页面渲染

示例

<script src="xxx.js" async></script>

defer 属性

在文档解析完成后执行(在触发 DOMContentLoaded 事件前执行)。因为有 defer 属性的脚本会阻止 DOMContentLoaded 事件,直到脚本被加载且完成解析

type="module"

带有该属性的脚本将被视为 js 模块,不受 async 和 defer 属性的影响

Last Updated:
Contributors: zhangfei