\<script>标签的属性async/defer异同

已知js文件最好放在body最后面:

在文档的元素中包含所有 JavaScript文件,意味着必须等到全部 JavaScript代码都被下载、
解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到标签时才开始呈现内容)。对于 那些需要很多 JavaScript
代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟 期间的浏览器窗口中将是一片空白。为了避免这个问题,现代
Web应用程序一般都把全部 JavaScript引 用放在元素中页面内容的后面
… …<红宝书第2章>

但可以给<script>通过设置属性async或者defer抵消下载/解析脚本时空白时间的缺点:

async:可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或 等待加载其他脚本。只对外部脚本文件有效。
defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有 效。IE7及更早版本对嵌入脚本也支持这个属性。

async/defer异同:
同:1.都只适用外部脚本
异:
1.async是异步操作,从下载脚本开始都不影响页面中的其他操作; defer只是把解析进行了延迟,页面碰到"<script>"还是会优先下载,但可以把脚本延迟到文档完全被解析和显示之后再执行;
2. 同时有多个外部js文件设置async或者defer属性的话,defer后按照规范它们仍然按照先后顺序执行,而async后执行顺序被打乱,所以如果有两个js文件用async,那么要保证两个js文件无依赖关系;
3.
defer属性虽然按规范是按顺序执行的,但现实用的时候不一定,所以无论async和defer最好都只有一个异步/延迟脚本

猜你喜欢

转载自blog.csdn.net/Fky_mie/article/details/115592881