Skip to content

当浏览器加载html遇到<script></script>,必须立即执行该脚本,如果是外部脚本<script src=""></script>,等待下载完再执行

所以可以把脚本放在页面底部

但是对于长的html,只有下载了完整的html才会注意到该脚本,然后开始下载它,对于低速网络,会造成明显的延迟。

幸运的是,这里有两个特性可以为我们解决这个问题:defer 和 async。(仅用于外部脚本)

defer

脚本将在后台下载,不阻塞html解析。等待dom解析完毕,但在 DOMContentLoaded 事件之前执行

DOMContentLoaded

当 HTML 文档已完全解析且所有延迟脚本(<script defer src="…" />和<script type="module" />)已下载并执行时,将触发此事件

具有defer特性的脚本按照其相对顺序执行

async

也不阻塞html解析,async脚本不会等待其他脚本,async脚本可能在 DOMContentLoaded 之前或之后执行