'use strict';/*非同步資料模組載入器
功能1、載入器存在 主任務、副任務、子任務
newrequire 表示載入主任務,主任務併發執行,newrequire(param1),執行主任務的時候,暫停副任務,主任務結束後,再執行副任務。
onrequirefree 表示載入副任務,任務放佇列,主任務結束後,副任務按順序執行
require表示載入子任務,rule匹配後,執行rulefunc(param1)
2、執行過程為:傳入資料模組,匹配rule,執行rulefunc,返回結果
param1表示模組資料,可為 string、object、number、array,
definerule表示定義規則,definerule(rule,rulefunc)
rule表示模組規則,可為 string、function、number,匹配param1則返回true,然後執行規則函式
rulefunc表示規則函式,可為asyncfunction、function,返回結果
3、生命週期
相同的param1在同乙個newrequire週期中,只會載入一次,預設快取時間為0,也就是在下乙個newrequire之前會被清理調快取。
4、設定param1快取時間
definerule(rule,rulefunc,0) 定義符合規則的所有模組,無快取,優先順序底
this.setcachetime(param1,1000) 在rulefunc函式內呼叫,設定快取1秒,優先順序高
demo
主任務mainloader.newrequire([
,]).then(function (res) ).catch(function (e) )
=》[ ,
1585545204777 ]
副任務mainloader.onrequirefree().then(function (res) ).catch(function (e) )
=》完成任務 [ 'task1:1585547219188', 'clearmorecache:59' ]
*///主任務
class nrequire
constructor(loader);//快取
this.starttimemap={};
this.endtimemap={};
//獲取沒過期的快取
const time=new date().gettime();
for(let url in loader.cachemap)
if(this.istype(rultime,'number'))
if(this.istype(rulfunc,'asyncfunction'))catch (e)
this.cachemap[key] = res;
//快取時間
this.endtimemap[key]=new date().gettime();
}this.loader.endkey(key,res)
}else if(this.istype(rulfunc,'function'))else
//快取放入loader中
if(this.loader.modulecachetime[key]>0)
return res;
}else
}//設定模組快取時間
setcachetime(param1,cachetime)}}
//amd模組快取載入器
class amdloader
async startkey(key))}}
endkey(key,res)
const arr=
while (this.running===0&&this.actionarr.length>0)catch (e)
}return arr
}clearcache(key)
definerule(rule,rulefunc,cachetime)
//命中規則
matchrule(param1)else if(this.istype(param1,'object'))else if(this.istype(param1,'array'))else if(this.istype(param1,'number'))
let index=-1;
let keyback;//params 返回值
for(let i=this.rules.length-1;i>-1;i--)
}else if(this.istype(rule,'string')||this.istype(rule,'number'))}}
if(index>-1)
}return
}log(obj)else if(obj.logtype==='error')
}//定義陣列載入,[name1,name2]
definearr()
},async function (param1)
return arr1})}
//定義物件載入
defineobj()
},async function (param1) ;
const arr1=
const arr2=
for(let k in param1)
const arr3=await promise.all(arr2);
for(let i=0;ireturn nobj})}
}module.exports=amdloader;
載入helloworld模組
include include if config modversions 1 define modversions include endif include include include module license gpl static int hello init void static ...
Odoo模組載入
odoo的啟動是通過openerp server指令碼完成,它是系統的入口。然後載入配置檔案openerp server.conf 或者 openerp serverrc openerp server.conf的主要內容 這個檔案預設是沒有的,odoo系統會有乙個預設值,但是一般情況我們都需配置這個...
angular模組載入
1.配置 在模組的載入階段,angularjs會在提供者註冊和配置的過程中對模組進行配置。需要特別注意,angularjs會以這些函式書寫和註冊的順序來執行它們。當對模組進行配置時,需要格外注意只有少數幾種型別的物件可以被注入到config 函式中 提供者和常量。2.執行塊 和配置塊不同,執行塊在注...