前端开发

 首页 > 前端开发 > javascript > js动态加载js封装最新评论添加评论

js动态加载js封装最新评论添加评论

分享到:
【字体:
导读:
         [导读] js动态加载js封装 下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度 【基本优化】 将所有需要的script标签都放在/body之前,确保脚本执行之前完成...

js动态加载js封装

下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度

 

  1. 【基本优化】

    将所有需要的标签来引入

  2.  

    【无堵塞加载JS】

    通过给script标签增加 defer属性或者是 async 属性来实现

    注解:

     

    async和defer不同之处是async加载完成后会自动执行脚本,defer加载完成后需要等待页面也加载完成才会执行代码

  3.  

    【动态创建script来加载-推荐】

  4. function loadJS( url, callback ){
        var script = document.createElement('script'),
            fn = callback || function(){};
        script.type = 'text/javascript';
        
        //IE
        if(script.readyState){
            script.onreadystatechange = function(){
                if( script.readyState == 'loaded' || script.readyState == 'complete' ){
                    script.onreadystatechange = null;
                    fn();
                }
            };
        }else{
            //其他浏览器
            script.onload = function(){
                fn();
            };
        }
        script.src = url;
        document.getElementsByTagName('head')[0].appendChild(script);
    }
     
    //用法
    loadJS('file.js',function(){
        alert(1);
    });
  5.  

    谷歌浏览器运行效果,script被动态创建在head中

  6.  

    建议大家可以封装成类库,单独引入。

    该原理实现的也有很多不错的js类库可以使用,如LazyLoad.js,支持数组的形式引入,打开浏览器在network中可看到js是同步加载的

  7.  

    【XHR加载】

    使用ajax方式加载

    代码:

  8. var xhr = new XMLHttpRequest;
    xhr.open('get','file.js',true);
    xhr.onreadystatechange = function(){
     
        if( xhr.readyState == 4 ){
            if( xhr.status >=200 && xhr.status < 300 || xhr.status == 304 ){
                var script = document.createElement('script');
                script.type = 'text/javascript';
                script.text = xhr.responseText;
                document.body.appendChild(script);
            }
        }
     
    };
    xhr.send(null);
  9. 8

    【总结】

    最好的方式还是使用动态创建script的方式加载,当动态创建script,浏览器会分配一个线程去下载src指向的资源,多个script也是同步下载的


分享到:
原型和原型链 prototype和proto的区别详...
1、原型 原型是function对象下的属性,它定义了构造函数的共同祖先,也就是一个父子级的关系,子对象会继承父对象的方法和属性 prototype是函数下的属性,对象想要查看原型使用隐式属性__Proto__ constructor指向构造函数 自己身上有属性,原型上也有属性,取近的,用自己的 通过给原型添加属性,可以让所有的实例化对...
.url后缀格式详解最新评论添加评论
.url后缀格式详解 [DEFAULT] BASEURL= [InternetShortcut] URL= WorkingDirectory= ShowCommand= IconIndex= IconFile= Modified= HotKey= 其中BASEURL、URL和WorkingDirectory这3项的含义是不言而明的。 ShowCommand规定Internet Explorer启动后窗口的初始状态:7表示最小化,3表示最大化;如果没有ShowCommand这一项的...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……