3 async特性
3.1 关于async脚本的执行时机
async特性是HTML5中引入的特性,使用方式为:async="async",我们首先看一下标准中对于async特性的相关描述:
async:If the async attribute is present, then the script will be executed asynchronously, as soon as it is available.
需要指出,这里的异步,指的其实是异步加载而不是异步执行,也就是说,浏览器遇到一个async的script标签时,会异步的去加载(个人认为这个过程主要是下载的过程),一旦加载完毕就会执行代码,而执行的过程肯定还是同步的,也就是阻塞的 。我们可以通过下图来综合理解defer和async:
这样来看的话,async脚本的执行时机是无法确定的,因为脚本何时加载完毕也是不确定的 。我们通过下面的demo来感受一下:
async1.js
alert("我是异步的脚本");
HTML代码:
这里我们借用了《浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序》中的delayfile脚本来提供了一个延迟,这个脚本在支持async的浏览器中,弹框的顺序一般是:我是同步的脚本-》我是异步的脚本 。
3.2 async的浏览器支持情况
下面我们来看一下async特性的浏览器支持情况:
可以看到,只有IE10 才支持async特性,opera mini不支持async特性,另外,async是不支持内部脚本的 。
3.3 async总结
async指的异步脚本,即脚本异步加载,加载的过程不会造成阻塞,但是async的脚本的执行时机是不确定的,而且执行的顺序也是不确定的,因此使用async的脚本应该是不依赖于任何代码的脚本(比如第三方统计代码或广告代码),否则就会导致执行出错 。
4 defer和async的优先级问题
这一点比较好理解,标准中规定了:
【浏览器环境下JavaScript脚本加载与执行探析之defer与async特性】[1]如果
推荐阅读
- win10中Chrome谷歌浏览器看视频提示could’t load plugins该怎么办?
- qq浏览器9是什么内核? QQ浏览器切换9.0内核的两种方法
- Win10只用Edge浏览器?是否应该卸载掉IE
- Win10中Edge浏览器怎么备份收藏夹?
- qq浏览器怎么卸载?不使用控制面板卸载qq浏览器的教程
- EditPlus怎么设置浏览器?EditPlus更改调试默认IE浏览器的教程分享
- 与虎谋皮下一句
- V360在有TF卡情况下安装相关资料文件的操作方法
- 无痕钉怎么拔下来
- 下五花和上五花的区别是什么