<script>标签里的defer和async属性 区别(待补充)
- defer与async的区别(表格显示):
区别 | defer | async |
---|---|---|
什么时候执行 | document 解析完毕且所有defer-script 加载完成后执行,然后触发 DOMContentLoaded 事件 | 下载完就执行;在 DOMContentLoaded 之前或之后执行,但一定在 load 之前执行 |
加载顺序 | 按顺序加载 | 加载顺序不确定 |
是否阻塞 | 与html解析并行,不阻塞html的解析,html解析完成后执行 | 会阻塞 load 事件 |
对于script标签里代码都无效,对src引入外部js文件有效 | ||
向 document 动态添加 script 标签时,async 属性默认是 true |
- defer与async的区别是:
前者要等到整个页面正常渲染结束,才会执行;后者一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再继续渲染。
一句话,defer是“渲染完再执行”,async是“下载完就执行”。
另外,如果有多个defer脚本,会按照它们在页面出现的顺序加载,而多个async脚本是不能保证加载顺序的。