AMDLoader資料模組載入器

2022-07-24 12:48:10 字數 2735 閱讀 8644

'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.執行塊 和配置塊不同,執行塊在注...