async & defer
2020-04-22 02:24
1106 查看
async & defer
两者都会并行下载,不会影响页面的解析。
defer 会按照顺序在 DOMContentLoaded 前按照页面出现顺序依次执行。
async 则是下载完立即执行。
普通 script
先来看一个普通的 script 标签。
<script src="a.js"></script>
浏览器会做如下处理:
- 停止解析 document.
- 请求 a.js
- 执行 a.js 中的脚本
- 继续解析 document
defer
<script src="d.js" defer></script> <script src="e.js" defer></script>
- 不阻止解析 document, 并行下载 d.js, e.js
- 即使下载完 d.js, e.js 仍继续解析 document
- 按照页面中出现的顺序,在其他同步脚本执行后,DOMContentLoaded 事件前 依次执行 d.js, e.js。
async
<script src="b.js" async></script> <script src="c.js" async></script>
- 不阻止解析 document, 并行下载 b.js, c.js
- 当脚本下载完后立即执行。(主要看哪个先下载完就先show哪个 ,执行阶段不确定,可能在 DOMContentLoaded 事件前或者后)
其他
- 如果 script 无 src 属性,则 defer, async 会被忽略
- 动态添加的 script 标签隐含 async 属性。
结论
- 两者都不会阻止 document 的解析
- defer 会在 DOMContentLoaded 前依次执行 (可以利用这两点哦!)
- async 则是下载完立即执行,不一定是在 DOMContentLoaded 前
- async 因为顺序无关,所以很适合像 Google Analytics 这样的无依赖脚本
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- HTML5 <script>元素async,defer异步加载
- 浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
- JavaScript 的 defer 与 async
- <script>标签 async与defer详解
- script标签中defer和async属性的区别
- 4000 js之script属性async与defer
- script之defer、async属性--JS高级程序设计(一)
- JavaScript 的 defer 与 async
- defer和async的区别
- defer、async属性以及JS异步加载并执行解决方案
- script之defer&async
- Script标签中的async和defer的区别
- HTML5 <script>元素async,defer异步加载
- javascript——defer和async的区别
- 二、1、defer 和 async区别
- script标签中defer和async属性的区别
- 浅谈script标签中的async和defer
- JS之async、defer加载的异同
- JS中script标签defer和async属性的区别
- script的defer和async