使用do 框架进行javascript无阻塞加载脚本

使用do 框架进行javascript无阻塞加载脚本

do 框架(3.5k)
Do是豆瓣网kejun开发的一个很轻量的Javascript开发框架。目前do.min.js。它的核心功能是对模块进行组织和加载。加载采取并行异步队列的策略,并且可以控制执行时机。Do可以任意置换核心类库,默认是jQuery。
项目地址:https://github.com/kejun/Do

下载地址为:http://download.csdn.net/detail/e421083458/4501683

上篇文章中讲到了使用 Scripts Block Downloads example 测试加载的外部脚本的速度!结果是很令人失望,js脚本必须执行完毕才能加载,js后面的html内容!
瀑布图为:


第一个脚本的下载和执行阻塞了其后的脚本下载以及页面的渲染,导致整个页面渲染完成需要11.75s。
我们把最消耗时间的两个脚本地址提取出来:

http://1.cuzillion.com/bin/resource.cgi?type=js&sleep=2&jsdelay=2&n=1&t=1345012676
http://1.cuzillion.com/bin/resource.cgi?type=js&sleep=2&jsdelay=2&n=2&t=1345012676

然后我们将kejun-Do-490e6f3解压,进入test,复制index.html一份。取名为maketest.html

源文件为:

<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
	<meta charset="UTF-8">
	<title>Do 2.0 单元测试</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" src="http://code.jquery.com/qunit/git/qunit.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css" type="text/css" media="screen" />

<script type="text/javascript" src="../do.js" data-cfg-corelib="core.js"></script>

<script type="text/javascript">
//domready之后加载
$(function() {

    asyncTest('测试核心类库默认被加载', function(){
      Do(function(){
        ok(typeof core_lib_loaded !== 'undefined', '核心类库默认加载成功');
        start();
      });
    });

    asyncTest('测试按模块名加载', function(){
	  //按组的形式加载
      Do.add('a1', {path: 'http://1.cuzillion.com/bin/resource.cgi?type=js&sleep=2&jsdelay=2&n=1&t=1345012676&r=' + Math.random(), type: 'js'});
	  Do.add('a2', {path: 'http://1.cuzillion.com/bin/resource.cgi?type=js&sleep=2&jsdelay=2&n=2&t=1345012676&r=' + Math.random(), type: 'js'});
	  //直接载入js或组名
      Do('a1', 'a2', function(){
        ok(typeof sleep_now !== 'undefined', 'a1, a2加载成功');
        start();
      });
    });

});
</script>
    
</head>
<body>
  <h1 id="qunit-header">Do 2.0 <sup>pre</sup></h1>

  <h2 id="qunit-banner"></h2>
  <div id="qunit-testrunner-toolbar"></div>

  <h2 id="qunit-userAgent"></h2>
  <ol id="qunit-tests"></ol>

  <div id="qunit-fixture"></div>
</body>
</html>


核心代码:

    asyncTest('测试按模块名加载', function(){
	  //按组的形式加载
      Do.add('a1', {path: 'http://1.cuzillion.com/bin/resource.cgi?type=js&sleep=2&jsdelay=2&n=1&t=1345012676&r=' + Math.random(), type: 'js'});
	  Do.add('a2', {path: 'http://1.cuzillion.com/bin/resource.cgi?type=js&sleep=2&jsdelay=2&n=2&t=1345012676&r=' + Math.random(), type: 'js'});
	  //直接载入js或组名
      Do('a1', 'a2', function(){
        ok(typeof sleep_now !== 'undefined', 'a1, a2加载成功');
        start();
      });
    });


使用do框架内置的按组加载js的方式加载JS。

瀑状图为

页面整体的渲染时间和加载时间为3.79s左右,这主要依赖于解决了脚本加载阻塞的问题,从上图中可以看到两个脚本是并行加载的,而且未阻塞后面资源的加载。该方法还有一个优点在于不会触发IE和FF的资源加载状态条如下图:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e421083458

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值