w3上的解释是:
defer 属性规定是否对脚本执行进行延迟,直到页面加载为止。
async 属性规定一旦脚本可用,则会异步执行。
注释:async 属性仅适用于外部脚本(只有在使用 src 属性时)。
我的理解:
defer属性:当当前的脚本不会改变页面所呈现的内容时,我们可以将defer属性加到<script>标签中,加快页面的处理速度。这时候浏览器会读取剩余的内容不执行脚本直到文档加载完毕。使用了该属性,告诉浏览器立即下载js脚本但是延迟执行。可能多个js代码不会是顺序执行,所以最好只包括一个js脚本。元素中设置该属性,相当于告诉浏览器立即下载,但延迟执行。如果有多个js文件都设置了defer属性,则按顺序执行。元素中设置该属性,相当于告诉浏览器立即下载,但延迟执行。如果有多个js文件都设置了defer属性,则按顺序执行。
async属性:异步执行。异步加载又叫非阻塞加载,浏览器在下载执行js的同时,还会继续进行后续页面的处理,也就是说js代码和页面的其他的脚本文件同时进行。使用了该属性是告诉浏览器立即下载js文件。
标签放在结尾处,这样尽可能减少页面阻塞。标签放在结尾处,这样尽可能减少页面阻塞。
标签中,以便加快处理文档的速度。因为浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本,它将推迟对脚本的解释,直到文档已经显示给用户为止。可将 defer 属性加入到 标签中,以便加快处理文档的速度。因为浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本,它将推迟对脚本的解释,直到文档已经显示给用户为止。 标签中,以便加快处理文档的速度。因为浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本,它将推迟对脚本的解释,直到文档已经显示给用户为止。 标签中,以便加快处理文档的速度。因为浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本,它将推迟对脚本的解释,直到文档已经显示给用户为止。