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 19 Javascript
检测jQuery.js是否已加载的判断代码
May 20 Javascript
js 获取和设置css3 属性值的实现方法
May 06 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
Apr 08 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 Javascript
JavaScript实现计算多边形质心的方法示例
Jan 31 Javascript
JS 实现百度搜索功能
Feb 01 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
Aug 12 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 Javascript
vue路由权限校验功能的实现代码
Jun 07 Javascript
JavaScript实现筛选数组
Mar 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
php curl选项列表(超详细)
2013/07/01 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
js转html实体的方法
2016/09/27 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
Python 多线程Threading初学教程
2017/08/22 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python sqlite的Row对象操作示例
2019/09/11 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
python识别验证码的思路及解决方案
2020/09/13 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
试用期员工工作自我评价
2014/09/10 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
高考升学宴答谢词
2015/01/20 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python