js 的延时加载

最近,由于项目中引用到的脚本比较多,页面首次加载速度有些慢,于是进行了一些优化

用到的是延时加载技术,大概思路就是减少页面的<script>标签,并依靠lazyload.js延时加载相应的脚本文件。

首先,要先引用lazyload.js ,这是一个老外写的脚本,我放到了公司的图片服务器上,大家可以直接访问  http://img.fang.com/rent/image/rent/js/lazyload.js

实践之前,先来看一下它的使用文档

// Load a single JavaScript file and execute a callback when it finishes.
LazyLoad.js(‘http://example.com/foo.js‘, function () {
  alert(‘foo.js has been loaded‘);
});

// Load multiple JS files and execute a callback when they‘ve all finished.
LazyLoad.js([‘foo.js‘, ‘bar.js‘, ‘baz.js‘], function () {
  alert(‘all files have been loaded‘);
});

// Load a CSS file and pass an argument to the callback function.
LazyLoad.css(‘foo.css‘, function (arg) {
  alert(arg);
}, ‘foo.css has been loaded‘);

// Load a CSS file and execute the callback in a different scope.
LazyLoad.css(‘foo.css‘, function () {
  alert(this.foo); // displays ‘bar‘
}, null, {foo: ‘bar‘});

可以看到,它同时支持js、css的延时加载。并且,还能一次加载多个文件。
下面是我自己定义的返回js路径的方法
// 用于返回延时加载的js路径
        function getJSUrls() {
            var version = ‘<%=FileVision %>‘;
            var mapimgurl = ‘<%=MapImgUrl %>‘;return [               
                mapimgurl + ‘/SearchResultNew.js?v=‘ + version,
                mapimgurl + ‘/suggestionnew.js?v=‘ + version,
                mapimgurl + ‘/jquery.zclip.min.js?v=‘ + version,               
                mapimgurl + ‘/ZUMAP.js?v=‘ + version,
                mapimgurl + ‘/common.js?v=‘ + version
            ];
        }

mapimgurl是图片服务器的某一目录,这里设置成变量便于统一管理。getJSUrls方法返回的是一个字符串数组,正好可以对应文档中给出的第二种方法。

得到路径之后,开始加载

     // 延迟加载
        (function () {
            LazyLoad.js(getJSUrls(), function () {
              // do something
            });
        } ())

   

这里的得到getJSUrls返回的数组,还可以换一种方式处理

        var urls = getJSUrls();        
        for (var i = 0; i < urls.length; ++i) {
          LazyLoad.js(urls[i], function(){
                // do something
            });
        }                

这样是一个一个的加载,可以根据情况加上一些判断。

 

这只是一个小小的尝试,具体能优化多少,其实我也不知道。新手还在学习中,大家共勉~

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。