异步加载JS

223 阅读1分钟

1.defer异步加载

<script  type="text/javascript" defer = "defer">

只有IE能用,而且可以在里面写js

页面解析完毕时才被执行。

页面解析完毕 :标签扫描完,dom树构建完毕(一定发生在页面加载完毕之前)

2.async异步加载(asychronous 异步 )

<script type="text/javascript" async= "async">

W3C标准方法,只能加载外部脚本,不能把js写在script标签里

加载完就执行

3.整合一个函数

function loadScript(url,callback){
    var script = document.createElement('script');
    script.type = "text/javascript";
    script.src = url;
    if(script.readyState){
        script.onreadystatechange = function(){
            if(script.readyState == "complete" || script.readyState == "loaded"){
                callback();
            }
        }

    }else{
        script.onload = function(){
            callback();
        }
    }
    script.src = url;
    document.head.appendChild(script);
}
// loadScript('demo.js',function(){
//     test();
// });

最后看一下js的加载时间线(图片来源:渡一教育)

顺便说一下

docunment.onreadystatechange = function(){

}   是在文档解析完成时进行操作

window.onload和jQuery中 

$(document).ready(function(){})

的区别,前者是页面整个加载完毕,后者是dom解析完就执行

————————————————————————————

如果要把script写在上面,window.onload是最低效的写法

是页面解析完加载完没事干了才执行

而document.addEventListener('DOMContentLoaded',function(){})

是DOM元素解析完就执行