in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案


Posted in Javascript onJuly 26, 2011

国外的像基于jQuery的RequireJs,YUI Loader,LabJs,RunJs,国内也有淘宝的SeaJs,豆瓣的DoJs等,这些都是一些十分优秀的模块加载器。但是本文将会向大家介绍一个新的开源的轻量级“多线程”异步模块加载器In.js,In的开发借鉴了Do的一些思路和使用习惯,在此期间感谢@kejun同我的耐心交流,In.js压缩后只有4.77k,不仅小巧而且十分好用。

优点:
按需加载
无阻塞加载
依赖关系管理
颗粒化模块管理
如何使用?
A.引入In.js

<script type="text/javascript" src="in.js" autoload="true" core="jquery.min.js"></script>

只需要在页面顶部引入in.js即可,这里有两个参数需要注意:
autoload: 是否在加载in.js的时候加载底层核心库 ? {可选参数 ? true|false}
core: 底层核心库的路径 ? {可选参数 ? url}
如果同时设置了core,并且autoload=true,则在引入In.js的同时加载core到页面中。
B.声明各个模块的地址和依赖关系In.add(name,{config})
In.add('mod-a',{path:'mods/a.js',type:'js',charset:'utf-8'}); 
In.add('mod-b',{path:'mods/b.js',type:'js',charset:'utf-8',rely:['mod-b-css']}); 
In.add('mod-b-css',{path:'mods/b.css',type:'css',charset:'utf-8',rely:['mod-a']});

上述代码声明了三个模块的依赖关系和模块的地址,并将它们加入到队列中去(仅仅是加入队列,并没有加载到页面中去)。
C.加载队列In(queue)
var demo=In('mod-b',function() { 
//do something 
},function() { 
//do something 
return false; 
});

加载mod-b模块,加载完后执行functionA和functionB,在此假设引入in.js时设置了autoload=true,那么队列中的加载顺序依次为:
1 jquery.min.js >>> mod-a >>> mod-b-css >>> mod-b >>> functionA() >>> functionB()
队列全部加载完成后,demo会被赋值为一个数组,其中存放的是每个function的返回值:
1 demo={returns:[undefined,false],complete:true}
D.在domReady之后加载队列In.ready(queue)
In.ready('mod-b',function() { 
//do something 
});

队列加载顺序:
jquery.min.js >>> {domReady} >>> mod-a >>> mod-b-css >>> mod-b >>> function()
In.ready()和In()的区别在于两点:
In.ready()中的队列只有在domReady之后才会执行 In.ready()没有返回值 E.监听变量变化,值改变则执行回调In.watch(object,property,function(prop,old,new) {})
由于In加载的队列均为异步非阻塞式加载,所以有时候为了特殊需求(比如后续的操作依赖队列中function的返回值),我们需要在确保队列执行完成后,再执行后续操作。这种情况下,可以用In.watch()监听return.complete变量,当 return.complete==true的时候执行回调函数,代码如下:
var model=In('model',function() { 
//do something 
return 123; 
}); 
In.watch(model,'complete',function(prop,old,new) { 
if(model[prop]==true) { 
console.log(model.returns[0]);//print 123 
In.unwatch(model,prop);//destroy the watch event of model.complete 
} 
});

In的魅力远远不止上述这些,它的可靠性也已经在几个大项目中得到了印证,除此之外,In也有智能的提示,比如如果用In()加载一个事先未声明的模块,就会提示你检查模块名。真心的希望有更多的前端朋友关注In,使用In,甚至投入到In的后续开发中来。

下图是In.js的英文版使用图册:

in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案

在哪下载?

In.js是一个开源的项目,你可以在下边的地址找到它的源代码或者下载它使用。

用In.js颗粒化管理、加载你的Javascript模块

http://project.benben.cc/In

http://github.com/PaulGuo/In

关于作者

Author: Guokai

Javascript 相关文章推荐
javascript动画之圆形运动,环绕鼠标运动作小球
Jul 20 Javascript
document.write()及其输出内容的样式、位置控制
Aug 12 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
jQuery实现统计复选框选中数量
Nov 24 Javascript
javascript实现的闭包简单实例
Jul 17 Javascript
日常收藏的jquery技巧
Dec 02 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
Sep 13 Javascript
vue项目前端埋点的实现
Mar 06 Javascript
JS apply用法总结和使用场景实例分析
Mar 14 Javascript
js+canvas实现纸牌游戏
Mar 16 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 Javascript
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
Jul 26 #Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
Jul 26 #Javascript
jQuery选择器的工作原理和优化分析
Jul 25 #Javascript
Jquery 点击按钮显示和隐藏层的代码
Jul 25 #Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 #Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
Jul 22 #Javascript
JS 自定义带默认值的函数
Jul 21 #Javascript
You might like
海贼王:最美的悬赏令!
2020/03/02 日漫
php4的session功能评述(一)
2006/10/09 PHP
基于mysql的论坛(6)
2006/10/09 PHP
PHP入门学习的几个不错的实例代码
2008/07/13 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
Laravel日志用法详解
2016/10/09 PHP
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
解决Mac下使用python的坑
2019/08/13 Python
python global和nonlocal用法解析
2020/02/03 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
写好自荐信的技巧
2013/11/08 职场文书
先进工作者获奖感言
2014/02/08 职场文书
《理想》教学反思
2014/02/17 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL
Elasticsearch 数据类型及管理
2022/04/19 Python