async和defer区别
async和defer都是<script></script>
标签中可选的属性
- async: 可选的,如果写了该属性,表示应该立即下载脚本,但不应妨碍页面的其他操作,比如下载其他资源或等待加载其他脚本,只对外部标本文件有效,标记为async的脚本并不保证会按照他们指定的先后顺序执行。指定该属性的目的是不让页面等待脚本的下载和执行,从而异步加载其他内容,异步脚本不要在加载期间修改DOM,他一定会在load事件前执行,但可能在DOMContentLoad事件出发前或之后执行。
- defer: 可选的,告诉浏览器脚本可以延迟到文档完全被解析和显示之后再执行,只对外部脚本有效, html5规范要求脚本按照它们出现的先后顺序执行,延迟脚本会先于DOMContentLoaded事件执行,但现实中,延迟脚本并不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,所以一个页面最好只包含一个延迟脚本。
- 使用
<script></script>
有两种方式,一个是在页面中直接嵌入,一个是包含外部文件,有一个type属性,可以忽略不写,值会默认为’text/javascript’。
- 如果
<script></script>
放在header标签中,会等js代码被加载和解析执行完成后,才能开始呈现页面内。浏览器在遇到body标签才会呈现页面内容,所以一般将js文件的引入放在body里面。