<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script defer src="example1.js"></script>
<script defer src="example2.js"></script>
</head>
<body>
</body>
</html>
使用原因:
由于代码从上到下依次执行,如果将<script>标签放到<head>标签中引入外部js文件时,会阻塞<body>中DOM的生成,则会导致页面一打开时会出现长时间空白页。为了防止该现象产生便引入了defer和async属性。
共同点:
defer和async两者都是异步执行js文件的方式。
区别:
1.defer:
在script标签上使用defer,表示该<script>标签引入的外部js会立即下载但会推迟执行,直到代码走完</html>时才会执行。在新H5中明确规定,defer的执行顺序按照书写顺序执行,并且两者皆是在DOMContentLoaded事件之前执行,但在实际情况中并不按照该顺序执行。async在加载脚本的
目前支持defer属性的是从IE4,Firefox3.5,Safari5,Chrome7开始的。
在XHTML中的书写形式应为 "defer"="defer", 不能只写defer单个
2.async:
在<script>标签上使用async表示该外部资源会与DOM一起加载并执行,是属于同时进行,并且其他脚本也无需等待上一个脚本下载或加载完成之后再下载执行,与defer不同的是async标记的<script>并不一定会按照书写顺序加载。异步脚本在加载期间不应该修改DOM,因为在获取DOM时出错。
目前支持async的有Firefox3.6,Safari5,Chrome7
在XHTML中的书写形式应为 "defer"="defer", 不能只写defer单个