lynxerzhang / JSSkills

MIT License
0 stars 0 forks source link

script标签中的defer和async的意义 #16

Open lynxerzhang opened 5 years ago

lynxerzhang commented 5 years ago

如果什么标签都不加的话,代码加载和执行是同步的,它会中断解析document,直到它完成执行,并且代码的加载和执行的顺序都是根据script标签的位置决定的。

defer标签会在document还在加载解析的过程中去下载对应的script, 但是并不执行,必须等到document解析全部完成才会去执行对应的script, 并且执行的顺序是根据script标签的位置来决定的。可以理解成执行script的代码是放在DOMContentLoaded事件回调中。

async标签会在document还在加载解析的时候去下载对应的script, 但是下载好后会中断document的解析, 去执行之前下载好的script, 同时async标签不会保证按照script的顺序来执行。

//@see https://30secondsofinterviews.org/
What are defer and async attributes on a <script> tag?

Note: both attributes must only be used if the script has a src attribute (i.e. not an inline script).
<script src="myscript.js"></script>
<script src="myscript.js" defer></script>
<script src="myscript.js" async></script>