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 相关文章推荐
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
javascript 操作cookies及正确使用cookies的属性
Oct 15 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
Mar 31 Javascript
最常用的12种设计模式小结
Aug 09 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
Feb 27 Javascript
js读写(删除)Cookie实例详解
Apr 17 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
Sep 22 Javascript
jquery 字符串切割函数substring的用法说明
Feb 11 Javascript
Markdown+Bootstrap图片自适应属性详解
May 21 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 Javascript
ionic2.0双击返回键退出应用
Sep 17 Javascript
Vue中keep-alive的两种应用方式
Jul 15 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
php实现简单加入购物车功能
2017/03/07 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
python pickle 和 shelve模块的用法
2013/09/16 Python
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
python简单实现刷新智联简历
2016/03/30 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
Python中断多重循环的思路总结
2019/10/04 Python
浅析Python 多行匹配模式
2020/07/24 Python
python实现批处理文件
2020/07/28 Python
开办加工厂创业计划书
2014/01/03 职场文书
教师业务学习制度
2014/01/25 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
公务员政审材料范文
2014/12/23 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python