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操作userdata
Apr 27 Javascript
JavaScript 函数调用规则
Sep 14 Javascript
可以用来调试JavaScript错误的解决方案
Aug 07 Javascript
jquery maxlength使用说明
Sep 09 Javascript
JavaScript实现的字符串replaceAll函数代码分享
Apr 02 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 Javascript
Three.js学习之网格
Aug 10 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 Javascript
Node.JS文件系统解析实例详解
May 15 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
浅谈Webpack多页应用HMR卡住问题
Apr 24 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中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
常用PHP封装分页工具类
2017/01/14 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
js 窗口抖动示例
2013/09/04 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
Python变量作用范围实例分析
2015/07/07 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
Python读取properties配置文件操作示例
2018/03/29 Python
python assert的用处示例详解
2019/04/01 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
python中np是做什么的
2020/07/21 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
西北政法大学自主招生自荐信
2014/01/29 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
实习介绍信模板
2015/01/30 职场文书
护士个人总结范文
2015/02/13 职场文书
起诉书范文
2015/05/20 职场文书
政审证明范文
2015/06/19 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
hive数据仓库新增字段方法
2022/06/25 数据库