一种模块加载方法和装置的制造方法_2

文档序号:8258074阅读:来源:国知局
2之前,需要首先预设缓存,并在该缓存中存储编译后的模块,该在缓存中预存储编译后的模块的过程,如图2所示,可以包括如下步骤:
[0049]步骤201,接收对第二文件的执行请求。
[0050]该装置在接收到第二文件的执行请求后,执行该第二文件的脚本,该脚本中包含有第一模块。其中,该第二文件与第一文件可能相同,也可能不同。
[0051]步骤202,对第二文件的脚本中所包含的第一模块进行编译。
[0052]该装置按照现有方法对该第二文件的脚本中包含的第一模块进行编译,具体编译过程此处不再赘述。
[0053]步骤203,将编译后的第一模块存储在预设缓存中。
[0054]在编译完成该第一模块后,即可将编译后的该第一模块存储在预设缓存中。预设缓存中存储的编译后的各模块均可通过上述步骤获得。
[0055]预设缓存中的各模块均为初始化的模块,模块加载装置在加载预设缓存中的编译后的模块后,再对加载的编译后的模块进行赋值运行。预设缓存中的各编译后的模块均可以以哈希表的形式进行存储。
[0056]通过上述方式可以在预设缓存中的预先存储编译后的模块,从而可以在执行某一脚本时直接从预设缓存中获得对应的编译后的模块,而无需再重新编译模块。
[0057]参照图3,示出了本发明的另一种模块加载方法实施例的步骤流程图,具体可以包括如下步骤:
[0058]步骤301,接收对第一文件的执行请求。
[0059]该步骤与前述实施例中的步骤101类似,此处不再赘述。
[0060]步骤302,对于第一文件的脚本中所包含的第一模块,查找第一文件的执行内存中是否存在编译后的第一模块。
[0061]本实施例中,模块加载装置针对第一文件脚本中的第一模块既不是直接编译,也不是查找预设缓存中是否存在编译后的该第一模块,而是首先在该第一文件对应的执行内存中查找是否已经存在编译后的该第一模块,这样在执行内存中查找模块并调用模块的效率要比在预设缓存中查找模块并加载的效率更高。
[0062]若执行内存中存在该编译后的第一模块,则该装置可以直接调用该第一模块;若该执行内存中不存在该编译后的第一模块,则执行步骤303。
[0063]步骤303,在预设缓存中查找是否存在编译后的第一模块。
[0064]该步骤与前述实施例中的步骤102类似,此处不再赘述。若预设缓存中存在该编译后的第一模块,则执行步骤304,若不存在,则该装置编译该第一模块。
[0065]步骤304,在第一文件的执行内存中加载该编译后的第一模块。
[0066]本实施例通过先查找执行内存再查找预设缓存的步骤,更提高了文件执行效率。
[0067]上述各实施例中的第一模块可以是LUA模块或Python模块等。上述方法实施例均可以应用在lua-nginx-module关闭代码缓存的场景中。
[0068]需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0069]参照图4,示出了本发明一种模块加载装置实施例的结构示意图,具体可以包括如下单元:
[0070]第一请求接收单元401,用于接收对第一文件的执行请求。
[0071]缓存单元402,用于缓存模块。
[0072]查找单元403,用于对于所述第一文件的脚本中所包含的第一模块,在所述缓存单元402中查找是否存在编译后的所述第一模块。
[0073]加载单元404,用于在所述查找单元403查找到所述编译后的第一模块时,在所述第一文件的执行内存中加载所述编译后的第一模块。
[0074]其中,缓存单元402是与执行内存分开的独立的存储空间,该缓存单元402中预先存储有多个编译后的模块,这些模块可以是根据需要预先自主编译后存储在该缓存单元402中的,也可以是在接收到执行请求后,将根据该请求第一次编译的模块存储在该缓存单元402中的。该缓存单元402中的模块为初始化的模块。第一请求接收单元401在接收到对第一文件的执行请求后,对于第一文件的脚本中所包含的第一模块,由查找单元403在缓存单元402中查找编译后的第一模块,无需对该第一模块进行编译,查找单元403在查找到该编译后的第一模块后,即可由加载单元404在该第一文件的执行内存中加载该I编译后的第一模块。
[0075]本发明实施例中,该装置通过上述单元对文件脚本中的模块进行预存储,使得在执行文件脚本时,无需对脚本中包含的模块进行编译,直接将预存储的模块加载在对应的执行内存中即可,从而大大提高了文件执行效率,节省了编译模块所占用的资源。
[0076]在本发明的另一实施例中,该装置除了包括上述第一请求接收单元401,缓存单元402,查找单元403,加载单元404,之外,还可以包括:
[0077]第二请求接收单元501,用于在所述查找单元403查找是否存在所述编译后的第一模块之前,接收对第二文件的执行请求。
[0078]创建单元502,用于对所述第二文件的脚本中所包含的所述第一模块进行编译。
[0079]存储单元503,用于将编译后的所述第一模块存储在所述缓存单元402中。
[0080]在缓存单元402中所述编译后的第一模块以哈希表的形式进行存储。
[0081]通过上述第二请求接收单元501、创建单元502和存储单元503即可在缓存单元402中预先存储编译后的模块,从而可以在执行某一脚本时直接从预设缓存中获得对应的模块,而无需再重新编译模块。
[0082]在本发明的另一实施例中,该查找单元403,还可以用于在所述缓存单元402中查找是否存在所述编译后的第一模块之前,查找所述第一文件的执行内存中是否存在所述编译后的第一模块,若不存在,再在所述缓存单元402中查找是否存在所述编译后的第一模块。若执行内存中存在该编译后的第一模块,则该装置可以直接调用该编译后的第一模块。
[0083]查找单元403通过首先在该第一文件对应的执行内存中查找是否已经存在该编译后的第一模块,这样在执行内存中查找模块并调用模块的效率要比在预设缓存中查找模块并加载的效率更高。
[0084]本发明实施例中,上述第一模块可以是LUA模块或Python模块等。上述装置实施例均可以应用在lua-nginx-module关闭代码缓存的场景中。
[0085]本发明实施例还提供了一种电子设备,该电子设备包括数据总线,存储器和处理器,其中,存储器中存储有一段运行程序代码,处理器通过数据总线获取存储器中的程序代码,并执行以下步骤:
[0086]接收对第一文件的执行请求;
[0087]对于所述第一文件的脚本中所包含的第一模块,在预设缓存中查找是否存在编译后的所述第一模块;以及
[0088]若存在,则在所述第一文件的执行内存中加载所述编译后的第一模块。
[0089]该电子设备通过对文件脚本中的模块的编译后的形式进行预存储
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1