js中<script>中的async和defer属性区别

async和defer区别

async和defer都是<script></script>标签中可选的属性

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


下一篇:引用JavaScript文件时的两个属性defer和async