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静态的动态
Sep 18 Javascript
一段利用WSH获取登录时间的jscript代码
May 11 Javascript
基于jquery跨浏览器显示的file上传控件
Oct 24 Javascript
jquery 关于event.target使用的几点说明介绍
Apr 26 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
完美解决IE不支持Data.parse()的问题
Nov 24 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
快速将Vue项目升级到webpack3的方法步骤
Sep 14 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
Jul 10 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
webpack 处理CSS资源的实现
Sep 27 Javascript
vue跳转方式(打开新页面)及传参操作示例
Jan 26 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
投票管理程序
2006/10/09 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
Javascript的闭包
2009/12/31 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
python元组的概念知识点
2019/11/19 Python
挪威手表购物网站:Klokker
2016/09/19 全球购物
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
幼儿园秋季开学寄语
2014/08/02 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
如何在python中实现ECDSA你知道吗
2021/11/23 Python
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技