動(dòng)態(tài)打包方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種動(dòng)態(tài)打包方法和裝置。
【背景技術(shù)】
[0002]對(duì)前端的靜態(tài)資源的管理采用模塊化技術(shù)之后,使得每個(gè)JS(JavaScript,一種直譯式腳本語(yǔ)言)文件都可以視為一個(gè)模塊,模塊之間還存在依賴關(guān)系。當(dāng)頁(yè)面在前端運(yùn)行時(shí),如果沒(méi)有對(duì)多個(gè)JS文件按照某種規(guī)則進(jìn)行組合,也就是沒(méi)有對(duì)多個(gè)JS文件進(jìn)行打包,那么每個(gè)頁(yè)面都會(huì)加載大量的JS文件,導(dǎo)致JS文件的鏈接數(shù)目增加,網(wǎng)絡(luò)請(qǐng)求的負(fù)擔(dān)加重。如果有大量的請(qǐng)求訪問(wèn)頁(yè)面時(shí),就會(huì)對(duì)后臺(tái)服務(wù)器造成較大的壓力。
[0003]傳統(tǒng)的方式是在設(shè)計(jì)期對(duì)多個(gè)JS文件進(jìn)行打包,將每個(gè)頁(yè)面所依賴的模塊打包到一起,形成一個(gè)單一的JS文件。在運(yùn)行期是頁(yè)面就只加載打包后的JS文件,有效減少JS文件的鏈接數(shù)目。但是同一JS文件通常會(huì)在類似的頁(yè)面被頻繁下載,由此造成網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量增大。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對(duì)上述技術(shù)問(wèn)題,提供一種能夠有效減少網(wǎng)絡(luò)傳輸數(shù)據(jù)量的動(dòng)態(tài)打包方法和裝置。
[0005 ] 一種動(dòng)態(tài)打包方法,所述方法包括:
[0006]接收瀏覽器發(fā)送的判斷JS文件是否被修改的請(qǐng)求,所述請(qǐng)求中攜帶了JS文件集合和第一標(biāo)識(shí);
[0007]根據(jù)所述JS文件集合計(jì)算所述請(qǐng)求對(duì)應(yīng)的第二標(biāo)識(shí)的值;
[0008]判斷所述第一標(biāo)識(shí)的值與所述第二標(biāo)識(shí)的值是否相等;
[0009]若否,則進(jìn)一步判斷所述第一標(biāo)識(shí)對(duì)應(yīng)的臨時(shí)文件是否存在,所述臨時(shí)文件包括了用于動(dòng)態(tài)打包的URL中的多個(gè)JS文件;
[0010]若所述第一標(biāo)識(shí)對(duì)應(yīng)的臨時(shí)文件不存在,則利用修改后的JS文件進(jìn)行合并,得到修改后的臨時(shí)文件,并將修改后的臨時(shí)文件返回至所述瀏覽器。
[0011]在其中一個(gè)實(shí)施例中,在所述接收瀏覽器發(fā)送的判斷JS文件是否被修改的請(qǐng)求的步驟之前,還包括:
[0012]根據(jù)配置文件對(duì)業(yè)務(wù)特性包進(jìn)行打包;
[0013]利用界面特性包與所述業(yè)務(wù)特性包進(jìn)行過(guò)濾,生成用于動(dòng)態(tài)打包的URL。
[0014]在其中一個(gè)實(shí)施例中,所述根據(jù)配置文件對(duì)業(yè)務(wù)特性包進(jìn)行打包的步驟包括:
[0015]讀取配置文件,所述配置文件中包括多個(gè)業(yè)務(wù)特性包;
[0016]獲取所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊;
[0017]根據(jù)所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊獲取所述業(yè)務(wù)特性包對(duì)應(yīng)的所有依賴模塊,得到所有的業(yè)務(wù)特性包模塊;
[0018]對(duì)所業(yè)務(wù)特性包模塊進(jìn)行排序;
[0019]將排序后的業(yè)務(wù)特性包模塊打包為一個(gè)文件。
[0020]在其中一個(gè)實(shí)施例中,所述利用界面特性包與所述業(yè)務(wù)特性包進(jìn)行過(guò)濾,生成用于動(dòng)態(tài)打包的URL的步驟包括:
[0021]獲取界面特性包;
[0022]從所述界面特性包中解析所述界面特性包對(duì)應(yīng)的頂級(jí)模塊和依賴模塊,得到所有的界面特性包模塊;
[0023]利用所述界面特性包模塊過(guò)濾掉所述業(yè)務(wù)特性包模塊;
[0024]利用過(guò)濾后的模塊生成用于動(dòng)態(tài)打包的URL。
[0025]在其中一個(gè)實(shí)施例中,所述對(duì)所述業(yè)務(wù)特性包模塊進(jìn)行排序的步驟包括:
[0026]對(duì)所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊和依賴模塊分別設(shè)置對(duì)應(yīng)的計(jì)數(shù)器;
[0027]以所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊對(duì)應(yīng)的計(jì)數(shù)器的值為基準(zhǔn),按照依賴層級(jí)將依賴模塊對(duì)應(yīng)的計(jì)數(shù)器逐層累加,分別得到每個(gè)依賴模塊對(duì)應(yīng)的計(jì)數(shù)器的值;
[0028]按照計(jì)數(shù)器的值的大小對(duì)所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊和依賴模塊進(jìn)行排序。
[0029]在其中一個(gè)實(shí)施例中,所述方法還包括:
[0030]判斷JS文件是否被修改;
[0031 ]若是,則根據(jù)修改后的JS文件修改JS文件集合;
[0032]根據(jù)修改后的JS文件集合對(duì)臨時(shí)文件進(jìn)行更新,并利用更新后的臨時(shí)文件對(duì)URL資源集合進(jìn)行更新。
[0033]在其中一個(gè)實(shí)施例中,所述根據(jù)修改后的JS文件集合對(duì)臨時(shí)文件進(jìn)行更新的步驟包括:
[0034]根據(jù)URL資源集合和修改后的JS文件集合計(jì)算所需的線程任務(wù);
[0035]將多個(gè)線程任務(wù)形成隊(duì)列;
[0036]利用所述隊(duì)列對(duì)多個(gè)臨時(shí)文件進(jìn)行更新。
[0037]一種動(dòng)態(tài)打包裝置,所述裝置包括:
[0038]接收模塊,用于接收瀏覽器發(fā)送的判斷JS文件是否被修改的請(qǐng)求,所述請(qǐng)求中攜帶了 JS文件集合和第一標(biāo)識(shí);
[0039 ]計(jì)算模塊,用于根據(jù)所述J S文件集合計(jì)算所述請(qǐng)求對(duì)應(yīng)的第二標(biāo)識(shí)的值;
[0040]判斷模塊,用于判斷所述第一標(biāo)識(shí)的值與所述第二標(biāo)識(shí)的值是否相等;
[0041]所述判斷模塊還用于若所述第一標(biāo)識(shí)的值與所述第二標(biāo)識(shí)的值不相等,則進(jìn)一步判斷所述第一標(biāo)識(shí)對(duì)應(yīng)的臨時(shí)文件是否存在,所述臨時(shí)文件包括了用于動(dòng)態(tài)打包的URL中的多個(gè)JS文件;
[0042]合并模塊,用于若所述第一標(biāo)識(shí)對(duì)應(yīng)的臨時(shí)文件不存在,則利用修改后的JS文件進(jìn)行合并,得到修改后的臨時(shí)文件;
[0043]返回模塊,用于將修改后的臨時(shí)文件返回至所述瀏覽器。
[0044]在其中一個(gè)實(shí)施例中,所述裝置還包括:
[0045]打包模塊,用于根據(jù)配置文件對(duì)業(yè)務(wù)特性包進(jìn)行打包;
[0046]URL生成模塊,用于利用界面特性包與所述業(yè)務(wù)特性包進(jìn)行過(guò)濾,生成用于動(dòng)態(tài)打包的URL。
[0047]在其中一個(gè)實(shí)施例中,所述打包模塊包括:
[0048]第一獲取單元,用于讀取配置文件,所述配置文件中包括多個(gè)業(yè)務(wù)特性包;獲取所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊;
[0049]第一解析單元,用于根據(jù)所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊獲取所述業(yè)務(wù)特性包對(duì)應(yīng)的所有依賴模塊,得到所有的業(yè)務(wù)特性包模塊;
[0050]排序單元,用于對(duì)所述業(yè)務(wù)特性包模塊進(jìn)行排序;
[0051]打包單元,用于將排序后的業(yè)務(wù)特性包模塊打包為一個(gè)文件。
[0052]在其中一個(gè)實(shí)施例中,所述URL生成模塊包括:
[0053]第二獲取單元,用于獲取界面特性包;
[0054]第二解析單元,用于從所述界面特性包中解析所述界面特性包對(duì)應(yīng)的頂級(jí)模塊和依賴模塊,得到所有的界面特性包模塊;
[0055]過(guò)濾單元,用于利用所述界面特性包模塊過(guò)濾掉所述業(yè)務(wù)特性包模塊;
[0056]生成單元,用于利用過(guò)濾后的模塊生成用于動(dòng)態(tài)打包的URL。
[0057]在其中一個(gè)實(shí)施例中,所述排序單元還用于對(duì)所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊和依賴模塊分別設(shè)置對(duì)應(yīng)的計(jì)數(shù)器;以所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊對(duì)應(yīng)的計(jì)數(shù)器的值為基準(zhǔn),按照依賴層級(jí)將依賴模塊對(duì)應(yīng)的計(jì)數(shù)器逐層累加,分別得到每個(gè)依賴模塊對(duì)應(yīng)的計(jì)數(shù)器的值;按照計(jì)數(shù)器的值的大小對(duì)所述業(yè)務(wù)特性包所依賴的頂級(jí)模塊和依賴模塊進(jìn)行排序。
[0058]在其中一個(gè)實(shí)施例中,所述判斷模塊還用于判斷JS文件是否被修改;
[0059]所述裝置還包括:
[0060]更新模塊,用于若JS文件被修改,則根據(jù)修改后的JS文件修改JS文件集合;根據(jù)修改后的JS文件集合對(duì)臨時(shí)文件進(jìn)行更新,并利用更新后的臨時(shí)文件對(duì)URL資源集合進(jìn)行更新。
[0061 ]在其中一個(gè)實(shí)施例中,所述更新模塊包括:
[0062]任務(wù)計(jì)算單元,用于根據(jù)URL資源集合和修改后的JS文件集合計(jì)算所需的線程任務(wù);
[0063]隊(duì)列單元,用于將多個(gè)線程任務(wù)形成隊(duì)列;
[0064]更新單元,用于利用所述隊(duì)列對(duì)多個(gè)臨時(shí)文件進(jìn)行更新。
[0065]上述動(dòng)態(tài)打包方法和裝置,在接收瀏覽器發(fā)送的判斷JS文件是否被修改的請(qǐng)求之后,通過(guò)將根據(jù)該請(qǐng)求中攜帶的JS文件集合計(jì)算得到的請(qǐng)求對(duì)應(yīng)的第二標(biāo)識(shí)的值與該請(qǐng)求中攜帶的第一標(biāo)識(shí)的值進(jìn)行比較,如果第一標(biāo)識(shí)的值與第二標(biāo)識(shí)的值不相等,并且第一標(biāo)識(shí)對(duì)應(yīng)的臨時(shí)文件不存在,則利用修改后的JS文件進(jìn)行合并,得到修改后的臨時(shí)文件,并將修改后的臨時(shí)文件返回至瀏覽器。由于臨時(shí)文件中包括了用于動(dòng)態(tài)打包的URL在的多個(gè)JS文件,由此能夠在運(yùn)行期時(shí),能夠有效克服同一個(gè)模