js之异步加载

一、时间线

正式开始之前首先要明白时间线是怎么运作的。在此之前我看来了别人的时间线的描述,现在加上自己的理解,总结的时间线大致分为以下几个步骤:

  1. 创建document对象,开始解析文档,这个阶段document.readyState变为loading状态;
  2. 解析文档。遇到link外部css、script外部js等会创建其他线程进行加载,文档会继续进行解析,当文档解析完成(也就是DOM树绘制完成,但是外部资源可能还没有下载完成),document.readyState变为interactive状态,并且触发DOMContentLoaded事件;
  3. 外部资源全部下载完成,状态document.readyState变为complete(loaded)。

二、异步加载

异步加载js主要有以下几个方案:

  1. async:只能加载外部脚本,加载完就执行,不能把js代码写在script标签里;
<script type="text/javascript" src="xxx.js" async="async"></script>
  1. defer:只能IE使用,文档解析完成以后才会去执行;
<script type="text/javascript" src="xxx.js" defer="defer"></script>
  1. 按需加载:也就是动态创建script,加载完毕后通过callback回调。
<script>
  function loadScript(url,callback){
  			//创建script
            var script = document.createElement("script");
            //处理兼容性
            if(script.readyState){
            //IE等低版本
                script.onreadystatechange = function(){
                    if(script.readyState == "complete" || script.readyState == "loaded"){
                        callback();
                    }
                }
            }else{
            //其他版本
                script.onload = function(){  
                    callback();
                }
            }
            script.src = url;
            document.head.appendChild(script);
        }
//调用
loadScript("xxx.js",function(){
             test()
         })
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值