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 相关文章推荐
IE浏览器打印的页眉页脚设置解决方法
Dec 08 Javascript
javascript 模式设计之工厂模式详细说明
May 10 Javascript
在Javascript里访问SharePoint列表数据的实现方法
May 22 Javascript
通过js来制作复选框的全选和不选效果
May 22 Javascript
node.js中的buffer.toJSON方法使用说明
Dec 14 Javascript
如何用javascript计算文本框还能输入多少个字符
Jul 29 Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 Javascript
Javascript之面向对象--接口
Dec 02 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
angularjs实现table增加tr的方法
Feb 27 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
Nautil 中使用双向数据绑定的实现
Oct 02 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
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
PHP进程通信基础之信号
2017/02/19 PHP
JavaScript 10件让人费解的事情
2010/02/15 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
小区停车场管理制度
2014/01/27 职场文书
作弊检讨书1000字
2014/02/01 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
学生安全承诺书
2014/05/22 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
外出考察学习心得体会
2016/01/18 职场文书
如何书写授权委托书?
2019/06/25 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA