Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45686
  • 博文数量: 25
  • 博客积分: 851
  • 博客等级: 准尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-15 20:46
文章分类

全部博文(25)

文章存档

2011年(16)

2010年(9)

我的朋友

分类: 系统运维

2011-05-11 10:12:12

偷懒,将别人的东西直接贴过来吧,文章来自

---------------------------分割线

JS会阻塞其它页面资源的下载,通过对JS的异步加载可以解决这个问题,加快页面内容的呈现速度。获得更好的体验。

使用script标签加载 通过firebug查看各种资源加载状态,当test.js下载完毕后,图片才开始下载。

通过firebug查看各种资源加载状态,当test.js下载完毕后,图片才开始下载。

使用JSLoader异步加载JS

当使用异步加载方式加载JS时,test.js与图片同时加载,加快了页面的呈现:

JSLoader

JSLoader.load(url, [fun1], [funN]);
参数:
url 要加载的JS的地址
fun 依赖该JS执行的函数

使用示例:

  1. JSLoader.load('test.js', function(){
  2.     document.getElementById('test').innerHTML = test;
  3. });

JSLoader源码:

  1. var JSLoader = function(){

  2.     var scripts = {};

  3.     function getScript(url){
  4.         var script = scripts[url];
  5.         if (!script){
  6.             script = {loaded:false, funs:[]};
  7.             scripts[url] = script;
  8.             add(script, url);
  9.         }
  10.         return script;
  11.     }

  12.     function run(script){
  13.         var funs = script.funs,
  14.             len = funs.length,
  15.             i = 0;

  16.         for (; i < len; i++){
  17.             var fun = funs.pop();
  18.             fun();
  19.         }
  20.     }

  21.     function add(script, url){
  22.         var scriptdom = document.createElement('script');
  23.         scriptdom.type = 'text/javascript';
  24.         scriptdom.loaded = false;
  25.         scriptdom.src = url;

  26.         scriptdom.onload = function(){
  27.             scriptdom.loaded = true;
  28.             run(script);
  29.             scriptdom.onload = scriptdom.onreadystatechange = null;
  30.         };

  31.         //for ie
  32.         scriptdom.onreadystatechange = function(){
  33.             if ((scriptdom.readyState === 'loaded' ||
  34.                     scriptdom.readyState === 'complete') && !scriptdom.loaded) {

  35.                 run(script);
  36.                 scriptdom.onload = scriptdom.onreadystatechange = null;
  37.             }
  38.         };

  39.         document.getElementsByTagName('head')[0].appendChild(scriptdom);
  40.     }

  41.     return {
  42.         load: function(url){
  43.             var arg = arguments,
  44.                 len = arg.length,
  45.                 i = 1,
  46.                 script = getScript(url),
  47.                 loaded = script.loaded;

  48.             for (; i < len; i++){
  49.                 var fun = arg[i];
  50.                 if (typeof fun === 'function'){
  51.                     if (loaded) {
  52.                         fun();
  53.                     }else{
  54.                         script.funs.push(fun);
  55.                     }
  56.                 }
  57.             }
  58.         }
  59.     };
  60. }();

阅读(774) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~