in.js 一個(gè)輕量級(jí)的JavaScript顆?;K加載和依賴關(guān)系管理解決方案
優(yōu)點(diǎn):
按需加載
無(wú)阻塞加載
依賴關(guān)系管理
顆粒化模塊管理
如何使用?
A.引入In.js
<script type="text/javascript" src="in.js" autoload="true" core="jquery.min.js"></script>
只需要在頁(yè)面頂部引入in.js即可,這里有兩個(gè)參數(shù)需要注意:
autoload: 是否在加載in.js的時(shí)候加載底層核心庫(kù) – {可選參數(shù) – true|false}
core: 底層核心庫(kù)的路徑 – {可選參數(shù) – url}
如果同時(shí)設(shè)置了core,并且autoload=true,則在引入In.js的同時(shí)加載core到頁(yè)面中。
B.聲明各個(gè)模塊的地址和依賴關(guān)系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']});
上述代碼聲明了三個(gè)模塊的依賴關(guān)系和模塊的地址,并將它們加入到隊(duì)列中去(僅僅是加入隊(duì)列,并沒(méi)有加載到頁(yè)面中去)。
C.加載隊(duì)列In(queue)
var demo=In('mod-b',function() {
//do something
},function() {
//do something
return false;
});
加載mod-b模塊,加載完后執(zhí)行functionA和functionB,在此假設(shè)引入in.js時(shí)設(shè)置了autoload=true,那么隊(duì)列中的加載順序依次為:
1 jquery.min.js >>> mod-a >>> mod-b-css >>> mod-b >>> functionA() >>> functionB()
隊(duì)列全部加載完成后,demo會(huì)被賦值為一個(gè)數(shù)組,其中存放的是每個(gè)function的返回值:
1 demo={returns:[undefined,false],complete:true}
D.在domReady之后加載隊(duì)列In.ready(queue)
In.ready('mod-b',function() {
//do something
});
隊(duì)列加載順序:
jquery.min.js >>> {domReady} >>> mod-a >>> mod-b-css >>> mod-b >>> function()
In.ready()和In()的區(qū)別在于兩點(diǎn):
In.ready()中的隊(duì)列只有在domReady之后才會(huì)執(zhí)行 In.ready()沒(méi)有返回值 E.監(jiān)聽(tīng)變量變化,值改變則執(zhí)行回調(diào)In.watch(object,property,function(prop,old,new) {})
由于In加載的隊(duì)列均為異步非阻塞式加載,所以有時(shí)候?yàn)榱颂厥庑枨螅ū热绾罄m(xù)的操作依賴隊(duì)列中function的返回值),我們需要在確保隊(duì)列執(zhí)行完成后,再執(zhí)行后續(xù)操作。這種情況下,可以用In.watch()監(jiān)聽(tīng)return.complete變量,當(dāng) return.complete==true的時(shí)候執(zhí)行回調(diào)函數(shù),代碼如下:
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的魅力遠(yuǎn)遠(yuǎn)不止上述這些,它的可靠性也已經(jīng)在幾個(gè)大項(xiàng)目中得到了印證,除此之外,In也有智能的提示,比如如果用In()加載一個(gè)事先未聲明的模塊,就會(huì)提示你檢查模塊名。真心的希望有更多的前端朋友關(guān)注In,使用In,甚至投入到In的后續(xù)開(kāi)發(fā)中來(lái)。
在哪下載?
In.js是一個(gè)開(kāi)源的項(xiàng)目,你可以在下邊的地址找到它的源代碼或者下載它使用。
用In.js顆?;芾?、加載你的Javascript模塊
http://project.benben.cc/In
http://github.com/PaulGuo/In
關(guān)于作者
Author: Guokai
相關(guān)文章
javascript下漢字和Unicode編碼互轉(zhuǎn)代碼
這個(gè)是就是把漢字和Unicode編碼互轉(zhuǎn)的javascript代碼,也是從網(wǎng)上找到了,也許有人用得著??!2010-10-10javascript中cookie對(duì)象用法實(shí)例分析
這篇文章主要介紹了javascript中cookie對(duì)象用法,實(shí)例分析了javascript針對(duì)cookie對(duì)象的寫入、讀取及刪除等操作的使用方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-01-01如何在CocosCreator中使用http和WebSocket
這篇文章主要介紹了在Cocos Creator中使用的Http和WebSocket,對(duì)websocket感興趣的同學(xué),一定要看下2021-04-04javascript中call,apply,bind的區(qū)別詳解
這篇文章主要介紹了javascript中call,apply,bind的區(qū)別詳解,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下2020-12-12JavaScript 設(shè)計(jì)模式 富有表現(xiàn)力的Javascript(一)
javascript設(shè)計(jì)模式是圖靈出版,學(xué)習(xí)中力求每個(gè)章節(jié)都細(xì)看。2010-05-05JavaScript變量提升和嚴(yán)格模式實(shí)例分析
這篇文章主要介紹了JavaScript變量提升和嚴(yán)格模式,結(jié)合實(shí)例形式分析了javascript變量提升和嚴(yán)格模式的原理及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-01-01