script async defer

208 阅读1分钟

异步与延迟属性

script中会有async 和 defer 属性,而且面试中常常会被问到,特意总结了一下

  • 绿色 HTML解析
  • 灰色 解析停顿
  • 蓝色 script下载
  • 粉色 script执行

<script>

script 在没有任何属性的时候,从HTML开始解析,直到命中脚本文件,此时解析会停止并请求获取文件(比如他是外部的),之后会在恢复解析之前执行该脚本

image.png

<script async>

script + async后会在HTML解析之间下载文件(异步),并在下载完后寻找时机会暂停HTML解析器执行

image.png

<script defer>

script + defer后在 HTML解析期间下载文件,并且仅在解析器完成后执行。defer脚本也保证按照它们在文档中出现的顺序执行

image.png

通常我们何时会使用的时候需要遵守哪些规则呢?

  • 如果脚本是模块化的并且不依赖任何脚本,那么使用async.
  • 如果脚本依赖或被另一个脚本依赖,则使用defer
  • 如果async脚本依赖于其他脚本,需要使用不设置任何异步的内联脚本