一種模塊加載方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及數(shù)據(jù)處理技術領域,特別是涉及一種模塊加載方法和一種模塊加載裝置。
【背景技術】
[0002]動態(tài)網(wǎng)頁是跟靜態(tài)網(wǎng)頁相對的一種網(wǎng)頁編程技術。靜態(tài)網(wǎng)頁,隨著html代碼的生成,頁面的內(nèi)容和顯示效果就基本上不會發(fā)生變化了一一除非修改頁面代碼。而動態(tài)網(wǎng)頁則不然,頁面代碼雖然沒有變,但是顯示的內(nèi)容卻是可以隨著時間、環(huán)境或者數(shù)據(jù)庫操作的結(jié)果而發(fā)生改變的。
[0003]現(xiàn)有技術中,在接收到執(zhí)行某一動態(tài)網(wǎng)頁文件的請求時,需要運行該文件的腳本,對該腳本中的模塊進行編譯,然后加載并運行編譯后的模塊,尤其在lua-nginx-module關閉代碼緩存的場景中,即使每次請求執(zhí)行的文件腳本中包含相同的模塊,也均需要在每次執(zhí)行文件腳本時,對其中包含的所有模塊進行重新編譯。顯然,這種在每次運行時需要對所有模塊重新編譯的方式,文件執(zhí)行效率較低,而且會浪費資源。
[0004]因此,本領域亟需一種新的腳本運行方法,以提高文件執(zhí)行效率,節(jié)省編譯模塊占用的資源。
【發(fā)明內(nèi)容】
[0005]鑒于上述技術問題,本發(fā)明的實施例提出了一種模塊加載方法和裝置,以便克服上述問題或者至少部分地解決上述問題。
[0006]本發(fā)明的實施例公開了一種模塊加載方法,所述包括:
[0007]接收對第一文件的執(zhí)行請求;
[0008]對于所述第一文件的腳本中所包含的第一模塊,在預設緩存中查找是否存在編譯后的所述第一模塊;以及
[0009]若存在,則在所述第一文件的執(zhí)行內(nèi)存中加載所述編譯后的第一模塊。
[0010]進一步,在對于所述第一文件的腳本中所包含的第一模塊,在預設緩存中查找是否存在編譯后的所述第一模塊之前,所述方法進一步包括:
[0011]接收對第二文件的執(zhí)行請求;
[0012]對所述第二文件的腳本中所包含的所述第一模塊進行編譯;以及
[0013]將編譯后的所述第一模塊存儲在所述預設緩存中。
[0014]進一步,在所述對于所述第一文件的腳本中所包含的第一模塊,在預設緩存中查找是否存在編譯后的所述第一模塊之前,所述方法進一步包括:
[0015]查找所述第一文件的執(zhí)行內(nèi)存中是否存在所述編譯后的第一模塊,若不存在,再在預設緩存中查找是否存在所述編譯后的第一模塊。
[0016]進一步,在所述預設緩存中所述編譯后的第一模塊以哈希表的形式進行存儲。
[0017]進一步,所述編譯后的第一模塊為LUA模塊或Python模塊。
[0018]本發(fā)明的實施例還公開了一種模塊加載裝置,所述裝置包括:
[0019]第一請求接收單元,用于接收對第一文件的執(zhí)行請求;
[0020]緩存單元,用于緩存模塊;
[0021]查找單元,用于對于所述第一文件的腳本中所包含的第一模塊,在所述緩存單元中查找是否存在編譯后的所述第一模塊;以及,
[0022]加載單元,用于在所述查找單元查找到所述編譯后的第一模塊時,在所述第一文件的執(zhí)行內(nèi)存中加載所述編譯后的第一模塊。
[0023]進一步,所述裝置進一步包括:
[0024]第二請求接收單元,用于在所述查找單元查找是否存在所述編譯后的第一模塊之前,接收對第二文件的執(zhí)行請求;
[0025]創(chuàng)建單元,用于對所述第二文件的腳本中所包含的所述第一模塊進行編譯;以及
[0026]存儲單元,用于將編譯后的所述第一模塊存儲在所述緩存單元中。
[0027]進一步,所述查找單元,還用于在所述緩存單元中查找是否存在所述編譯后的第一模塊之前,查找所述第一文件的執(zhí)行內(nèi)存中是否存在所述編譯后的第一模塊,若不存在,再在所述緩存單元中查找是否存在所述編譯后的第一模塊。
[0028]進一步,在所述緩存單元中所述編譯后的第一模塊以哈希表的形式進行存儲。
[0029]進一步,所述編譯后的第一模塊為LUA模塊或Python模塊。
[0030]與現(xiàn)有技術相比,本發(fā)明實施例至少包括以下優(yōu)點:
[0031]本發(fā)明實施例通過對文件腳本中的模塊進行編譯后再預存儲,使得在執(zhí)行文件腳本時,無需重復對腳本中包含的模塊進行編譯,直接將預存儲的模塊加載在對應的執(zhí)行內(nèi)存中,或直接運行執(zhí)行內(nèi)存中的模塊即可,從而大大提高了文件執(zhí)行效率,節(jié)省了編譯模塊所占用的資源。
【附圖說明】
[0032]圖1是本發(fā)明的一種模塊加載方法實施例的步驟流程示意圖;
[0033]圖2是本發(fā)明實施例中獲得預設緩存中的模塊的方法流程示意圖;
[0034]圖3是本發(fā)明的另一種模塊加載方法實施例的步驟流程示意圖;
[0035]圖4是本發(fā)明的一種模塊加載裝置實施例的結(jié)構(gòu)示意圖;
[0036]圖5是本發(fā)明的另一種模塊加載裝置實施例的結(jié)構(gòu)示意圖。
【具體實施方式】
[0037]為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和【具體實施方式】對本發(fā)明作進一步詳細的說明。
[0038]參照圖1,示出了本發(fā)明的一種模塊加載方法實施例的步驟流程圖,具體可以包括如下步驟:
[0039]步驟101,接收對第一文件的執(zhí)行請求。
[0040]模塊加載裝置在接收到對第一文件的執(zhí)行請求后,運行該第一文件的腳本,該腳本中可能包含有多個模塊,對于該腳本中包含的第一模塊,該裝置執(zhí)行步驟102。其中,該第一文件可以為動態(tài)網(wǎng)頁文件,第一模塊可以是腳本中包含的任一模塊。
[0041]步驟102,對于第一文件的腳本中所包含的第一模塊,在預設緩存中查找是否存在編譯后的弟一t旲塊。
[0042]該裝置對于腳本中包含的第一模塊不是直接進行編譯,而是執(zhí)行本步驟,在預設的緩存中查找是否存在該編譯后的第一模塊。
[0043]其中,該預設緩存是與執(zhí)行內(nèi)存分開的獨立的存儲空間,該預設緩存中預先存儲有多個編譯后的模塊,這些模塊可以是根據(jù)需要預先自主編譯后存儲在該預設緩存中的,也可以是在接收到執(zhí)行請求后,將根據(jù)該請求第一次編譯的模塊存儲在該預設緩存中的。該預設緩存中的模塊的獲得方法有多種,此處僅為舉例。該預設緩存中的模塊為初始化的豐旲塊。
[0044]若本步驟中可以在預設緩存中查找到該編譯后的第一模塊,則無需對該第一模塊進行編譯,直接執(zhí)行步驟103。若在該預設緩存中沒有查找到該編譯后的第一模塊,則可以對該第一模塊進行編譯,然后將編譯后的該模塊存儲在該預設緩存中,以便于后續(xù)需要該模塊時可以直接在預設緩存中查找到,無需再重復編譯。
[0045]步驟103,在第一文件的執(zhí)行內(nèi)存中加載該編譯后的第一模塊。
[0046]若上步驟中,該裝置查找到該編譯后的第一模塊,則在本步驟中,該裝置即可直接在該第一文件的執(zhí)行內(nèi)存中加載該第一模塊,然后賦值運行該第一模塊。
[0047]本發(fā)明實施例通過對文件腳本中的模塊進行預存儲,使得在執(zhí)行文件腳本時,無需對腳本中包含的模塊進行編譯,直接將預存儲的模塊加載在對應的執(zhí)行內(nèi)存中即可,從而大大提高了文件執(zhí)行效率,節(jié)省了編譯模塊所占用的資源。
[0048]在本發(fā)明的另一實施例中,該裝置在執(zhí)行步驟10