文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>JS module LazyLoad之一

JS module LazyLoad之一

时间:2011-04-30  来源:snandy

随着web app中JS越来越多,有时页面首次加载时有很多JS并没有用到。这时为了提高下载速度,提高页面渲染效率就需要让这部分暂时不用的JS延迟加载,即只在用到它们的时候再下载。这里会先实现一个最简单JS的惰性加载。后续几篇会逐步加强功能直至一个完整的JS/CSS模块加载库。这个系列里我不会实现队列,即各个JS文件是并行下载的,只有当多个JS全部下载后才执行回调。当然在第二个系列JS Queue LazyLoad中会实现各个JS文件顺序加载,每个JS文件下载后都有一次回调机会。这两种方式有各自的应用场景。


先给出使用接口

LazyLoad.js(
        urls  // js文件路径
        fn    // 全部加载后回调函数
        scope // 指定回调函数执行上下文
);

示例

LazyLoad.js(['a.js','b.js','c.js'], function(){
        alert('加载完毕');
});

这个系统会尽全力去加载所有的JS文件,即当某个文件不存在或加载失败它不会就此中断,仍然会去加载其它的JS文件。直到所有的模块都加载了一次才去回调。


完整代码

LazyLoad = function(win){  
        var list,
                isIE = /*@cc_on!@*/!1,
                doc = win.document,
                head = doc.getElementsByTagName('head')[0];

        function createEl(type, attrs){
                var el = doc.createElement(type),
                        attr;
                for(attr in attrs){
                        el.setAttribute(attr, attrs[attr]);
                }
                return el;
        }
        function finish(obj){
                list.shift();
                if(!list.length){
                        obj.fn.call(obj.scope);
                }
        }
        function js(urls, fn, scope){
                list = [].concat(urls);
                var obj = {scope:scope||win, fn:fn};
                for(var i=0,len=urls.length; i<len; i++){
                        var script = createEl('script', {src: urls[i]});
                        if(isIE){
                                script.onreadystatechange = function(){
                                        var readyState = this.readyState;
                                        if (readyState == 'loaded' || readyState == 'complete'){
                                                this.onreadystatechange = null;
                                                finish(obj);
                                        }
                                }
                        }else{
                                script.onload = script.onerror = function(){
                                        finish(obj);
                                }
                        }
                        head.appendChild(script);
                }
        }
        return {js:js};
}(this);

LazyLoad_0.1.js下载

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载