CN107203401A - 一种前端项目构建方法、装置及系统 - Google Patents

一种前端项目构建方法、装置及系统 Download PDF

Info

Publication number
CN107203401A
CN107203401A CN201610153361.9A CN201610153361A CN107203401A CN 107203401 A CN107203401 A CN 107203401A CN 201610153361 A CN201610153361 A CN 201610153361A CN 107203401 A CN107203401 A CN 107203401A
Authority
CN
China
Prior art keywords
module
pending
processor
dependence
scheduler
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610153361.9A
Other languages
English (en)
Other versions
CN107203401B (zh
Inventor
葛羽航
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201610153361.9A priority Critical patent/CN107203401B/zh
Publication of CN107203401A publication Critical patent/CN107203401A/zh
Application granted granted Critical
Publication of CN107203401B publication Critical patent/CN107203401B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Multi Processors (AREA)

Abstract

本申请提供了一种前端项目构建方法、装置及系统。方法包括:获取前端项目的入口模块;将入口模块作为当前待处理模块,为其分配一个处理器以执行分析处理操作;将与当前待处理模块有依赖关系的模块均作为当前待处理模块,并行执行分析处理操作;根据执行完成分析处理操作的所有模块的javascript代码以及所有模块之间的依赖关系,生成项目构建文件。本申请利用CPU的并行计算能力,调度器调度多个处理器并行查找模块依赖关系以及编译javascript代码,大大节省了时间。并且,调度器与处理器之间通过异步消息通讯,避免了消息等待过程。利用本申请实施方案,大大缩短了前端项目构建时间,提高了前端项目构建效率。

Description

一种前端项目构建方法、装置及系统
技术领域
本申请属于计算机技术领域,尤其涉及一种前端项目构建方法、装置及系统。
背景技术
前端项目构建是前端技术领域的长久话题。前端项目构建,是指将前端项目使用到的所有源文件模块,合并成一个或几个文件,方便html页面直接引用最终代码。前端项目构建工具也随着前端技术的高速发展而快速变化。前端项目构建大概经历了以下的几个阶段:
第一阶段,使用代码压缩工具对js文件进行简单拼接和压缩;
第二阶段,使用seajs/requirejs等线上模块加载工具进行模块化管理;
第三阶段,使用grunt/gulp工具将拼接、压缩等构建过程自动化;
第四阶段,使用webpack工具对模块进行依赖分析,基于模块依赖构建项目。
现如今,webpack基本代表了主流的前端项目构建方案。Webpack的兴起,源于前端项目模块化开发的日趋成熟。代表前端发展主流的React,Angular框架,都需要模块化开发,通过模块化来细化功能和逻辑,使得代码具有更好的可维护和可复用性。
伴随模块化开发的日趋成熟,前端项目构建的另一个趋势是2次编译,也就是用非javascript语言编写软件,用编译器转成javascript代码后在浏览器执行。例如:React框架推出的是jsx语言,编写React项目,需要使用Babel工具将jsx语言转换成javascript语言;Angular框架使用的是Typescript语言,需要使用微软的tsc工具将Typescript语言转换成javascript语言。因此,伴随这个趋势,就要求前端构建工具在将模块打包的过程中,需要先调用相应的编译工具把源代码转成javascript语言后再打包到一块。对于这个需求,webpac引入了Loader(解析器)的概念来处理。
总的来说,前端项目构建技术的最前沿方向是,将非javascript编写的项目模块的源代码,编译转换成javascript语言,同时根据模块之间的相互依赖关系,打包和构建项目文件。
图1是根据相关技术的Webpack的前端项目构建流程图,如图1所示,该流程包括以下步骤(步骤S101-步骤S108):
步骤S101,维护一个模块列表,初始为空。
步骤S102,取项目的一个入口模块。
步骤S103,判断入口模块是否在模块列表中;如果是,则执行步骤S105,如果否,则执行步骤S104。
步骤S104,将入口模块加入模块列表中,并将其标记为待处理模块。
步骤S105,从模块列表里取最早加入的待处理模块,判断是否需要进行分析;如果是,则执行步骤S106,如果否,则执行步骤S107。
步骤S106,对待处理模块进行分析,编译待处理模块的javascript代码。
步骤S107,分析待处理模块的依赖关系,提取出与该待处理模块有依赖关系的所有模块,将这些模块作为待处理模块,加入到模块列表中,并重复执行步骤S105-步骤S107。
步骤S108,将模块列表里的所有模块进行合并打包,生成项目构建文件。
上述步骤S107到步骤S108是顺序执行的过程,未有效使用CPU的并行计算能力,步骤S107中使用了大量同步的同步操作,未有效利用异步,从而造成时间上的等待和浪费。
针对传统前端项目构建技术的构建时间较长的问题,目前尚未提出有效的解决方案。
发明内容
本申请目的在于提供一种前端项目构建方法、装置及系统,可以实现对商品风格类型进行自动、准确的识别,可以提高商品风格识别准确性和效率,降低作业人员的工作强度。
本申请提供一种前端项目构建方法、装置及系统是这样实现的:
一种前端项目构建方法,应用于调度器,所述方法包括:获取前端项目的入口模块;将所述入口模块作为当前待处理模块,为其分配一个处理器以执行分析处理操作;其中,所述分析处理操作包括:查找与当前待处理模块有依赖关系的模块以及反馈当前待处理模块的javascript代码;将与当前待处理模块有依赖关系的模块均作为当前待处理模块,并行执行所述分析处理操作;根据执行完成所述分析处理操作的所有模块的javascript代码以及所有模块之间的依赖关系,生成项目构建文件。
一种前端项目构建方法,应用于处理器,所述方法包括:接收调度器的操作指令;其中,所述操作指令中携带有待处理模块的文件路径;查找与所述待处理模块有依赖关系的模块;将查找结果和所述待处理模块的javascript代码反馈至所述调度器;其中,所述查找结果和所述javascript代码用于生成项目构建文件。
一种前端项目构建装置,应用于调度器,所述装置包括:模块获取单元,用于获取前端项目的入口模块;分配单元,用于将所述入口模块作为当前待处理模块,为其分配一个处理器以执行分析处理操作;其中,所述分析处理操作包括:查找与当前待处理模块有依赖关系的模块以及反馈当前待处理模块的javascript代码;将与当前待处理模块有依赖关系的模块均作为当前待处理模块,并行执行所述分析处理操作;文件生成单元,用于根据执行完成所述分析处理操作的所有模块的javascript代码以及所有模块之间的依赖关系,生成项目构建文件。
一种前端项目构建装置,应用于处理器,所述装置包括:指令接收单元,用于接收调度器的操作指令;其中,所述操作指令中携带有待处理模块的文件路径;处理单元,用于查找与所述待处理模块有依赖关系的模块;反馈单元,用于将查找结果和所述待处理模块的javascript代码反馈至所述调度器;其中,所述查找结果和所述javascript代码用于生成项目构建文件。
一种前端项目构建系统,所述系统包括:上述的应用于调度器的前端项目构建装置,以及上述的应用于处理器的前端项目构建装置;其中,所述调度器与多个所述处理器之间通过异步消息进行交互。
本申请提供的前端项目构建方法、装置及系统,利用CPU(Central Processing Unit,中央处理器)的并行计算能力,调度器调度多个处理器并行查找模块依赖关系以及编译javascript代码,大大节省了时间。并且,调度器与处理器之间通过异步消息通讯,避免了消息等待过程。利用本申请实施方案,大大缩短了前端项目构建时间,提高了前端项目构建效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是根据相关技术的Webpack的前端项目构建流程图;
图2是本申请提出的前端项目构建方法的一种实施例的方法流程图;
图3是本申请提出的前端项目构建方法的一种实施例的方法流程图;
图4是本申请提出的调度器与处理器的体系架构图;
图5是本申请提出的调度器侧的前端项目构建方法的优选实施例的方法流程图;
图6是本申请提出的处理器侧的前端项目构建方法的优选实施例的方法流程图;
图7是本申请所述前端项目构建装置一种实施例的结构示意图;
图8是本申请所述前端项目构建装置一种实施例的结构示意图;
图9是本申请所述处理单元一种实施例的结构示意图;
图10是本申请所述反馈单元一种实施例的结构示意图;
图11是本申请所述前端项目构建系统一种实施例的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
下面结合附图对本申请所述的前端项目构建方法、装置及系统进行详细的说明。虽然本申请提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者更少的操作步骤或模块结构。在逻辑性上不存在必要因果关系的步骤或结构中,这些步骤的执行顺序或装置的模块结构不限于本申请实施例提供的执行顺序或模块结构。所述的方法或模块结构的在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法或模块结构连接进行顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
图2是本申请提出的前端项目构建方法的一种实施例的方法流程图,该方法应用于调度器,如图2所示,本申请提供的前端项目构建方法的一种实施例可以包括:
步骤S201,调度器获取前端项目的入口模块。一般情况下,一个前端项目具有多个入口,一个入口对应一个入口模块。在实际操作中,可基于前端项目的构建需求选择对哪一个入口模块进行后续的分析处理操作。
步骤S202,调度器将入口模块作为当前待处理模块,为其分配一个处理器以执行分析处理操作。上述分析处理操作至少可以包括:查找与当前待处理模块有依赖关系的模块以及反馈当前待处理模块的javascript代码。
之后,调度器将与当前待处理模块有依赖关系的模块均作为当前待处理模块,利用CPU的多核并行处理能力,并行执行上述分析处理操作。重复执行该步骤,直至不再存在具备依赖关系的模块为止。
步骤S203,调度器根据执行完成上述分析处理操作的所有模块的javascript代码以及所有模块之间的依赖关系,生成项目构建文件。
本实施例提供的前端项目构建方法,利用CPU的并行计算能力,对待处理模块并行执行分析处理操作,大大节省了时间。并且,调度器与处理器之间通过异步消息通讯,避免了消息等待过程。从而大大缩短了前端项目构建时间,提高了前端项目构建效率。
为了更好的管理待处理模块,可以建立一个初始为空的模块列表,将入口模块放入模块列表中,此时入口模块的状态是待处理状态。还可以建立一个包含有多个处理器的处理器列表,处理器的状态初始均设置为空闲状态。为了更好的利用CPU的多核并行处理能力,处理器的个数可以设置为与CPU的核数相等。
在此之后,为入口模块分配一个空闲状态的处理器,该处理器对入口模块执行下述分析处理操作:查找与入口模块有依赖关系的模块,并反馈入口模块的javascript代码。在该分析处理操作过程中,处理器的状态设置为忙碌状态,一旦处理器查找到与入口模块有依赖关系的一个模块,便立即将其放入模块列表中,并设置为待处理状态。然后继续查找,直至与入口模块有依赖关系的模块全部查找到。此时,该分析处理操作结束,处理器向调度器反馈入口模块的javascript代码,处理器的状态恢复为空闲状态。
之后,将与入口模块有依赖关系的模块标识为待处理模块,假设与入口模块有依赖关系的模块有A模块、B模块和C模块,则依次为待处理模块(A模块、B模块或者C模块)分配处理器,处理器查找与待处理模块(A模块、B模块或者C模块)有依赖关系的模块,并反馈待处理模块(A模块、B模块或者C模块)的javascript代码。假设与A模块有依赖关系的模块有两个,分别为A1模块和A2模块,则将A1模块和A2模块标识为待处理模块,依次为A1模块或A2模块分配处理器,处理器查找与待处理模块(A1模块或A2模块)有依赖关系的模块,并反馈待处理模块(A1模块或者A2模块)的javascript代码。如此循环,直至查找完所有依赖关系。B模块和C模块同样如此,在此不再重复说明。A模块、B模块和C模块的分析处理操作过程可并行处理,以缩短分析处理时长。
与此同时,模块列表中只要有处于待处理状态的模块(称为待处理模块),便从模块列表中依次调出待处理模块,为其分配空闲状态的处理器,如果此时所有处理器均处于忙碌状态,则等待,直至出现空闲状态的处理器。为了更好的管理模块列表,可以遵循先进先出的原则,先调出最早放入的待处理模块,为其分配处理器。多个处理器对多个待处理模块的分析处理操作可并行进行,从而节约前端项目构建时间。
下面针对处理器对模块的分析处理操作进行详细介绍。图3是本申请提出的前端项目构建方法的一种实施例的方法流程图,该方法应用于处理器,如图3所示,本申请提供的前端项目构建方法的一种实施例可以包括:
步骤S301,接收调度器的操作指令,该操作指令中携带有待处理模块的文件路径。处理器可基于文件路径准确找到待处理模块。
步骤S302,查找与待处理模块有依赖关系的模块。
步骤S303,将查找结果和待处理模块的javascript代码反馈至调度器。调度器可根据该查找结果和javascript代码生成项目构建文件。
本实施例提供的前端项目构建方法,调度器与处理器之间通过异步消息通讯,避免了消息等待过程。从而大大缩短了前端项目构建时间,提高了前端项目构建效率。
由于每个模块的文件类型可能并不相同,因此处理器需要根据待处理模块的文件类型,调用对应类型的解析器对模块文件进行解析,以查找与待处理模块有依赖关系的模块。
模块的文件类型至少有以下三种:js后缀名文件、jsx后缀名文件、ts后缀名文件。如果待处理模块的文件类型是js后缀名文件,则确定对应的解析器为Js解析器,由于该类型模块已经有javascript代码,因此不需要再进行代码解析。如果待处理模块的文件类型是jsx后缀名文件,则确定对应的解析器为Jsx解析器,并编译得到待处理模块的javascript代码;如果待处理模块的文件类型是ts后缀名文件,则确定对应的解析器为Ts解析器,并编译得到待处理模块的javascript代码。
在解析器对待处理模块的文件进行解析时,是将文件分割为多块,依次分析每一块文件内容,从而查找与待处理模块有依赖关系的模块。每查找到一个与待处理模块有依赖关系的模块,便即时通知处理器,以便处理器通过发现依赖消息(FOUND_DEPENDENCY)反馈给调度器,直至所有文件内容全部解析完成。与此同时,对需要进行代码编译的待处理模块进行编译,将待处理模块的javascript代码反馈至处理器,以便处理器通过分析结束消息(ANALYSIS_FINISH)反馈给调度器。基于此,解析器对待处理模块的文件进行解析后,既查找到与待处理模块有依赖关系的所有模块,又得到待处理模块的javascript代码,将查找结果与javascript代码都反馈给处理器,简化了处理流程,节省了时间。
本申请是一个分布式的并行处理方案,主要通过调度器(Dispatcher)和处理器(Worker)来实现。图4是本申请提出的调度器与处理器的体系架构图,如图4所示,一个调度器连接多个处理器,调度器与处理器之间通过异步消息进行交互。为了充分利用CPU的并行处理能力,处理器的个数可以设置为与CPU的核数相等。
下面通过优选实施例和附图对本申请的技术方案进一步详细介绍。
图5是本申请提出的调度器侧的前端项目构建方法的优选实施例的方法流程图,如图5所示,可以包括以下步骤:
步骤S501,调度器维护一个模块列表,初始为空。
步骤S502,调度器维护一个处理器(Worker)列表,Worker的初始数量可以设置为与CPU核数相等,以充分利用CPU的多核并行处理能力。处理器列表中的所有Worker均标记为空闲(Avaliable)状态。
步骤S503,调度器获取项目的一个入口模块。一个项目一般有多个入口,每个入口对应一个入口模块。
步骤S504,调度器将上述入口模块添加到模块列表中,并将其标记为待处理模块。
步骤S505,调度器为待处理模块分配Avaliable状态的Worker。具体包括以下步骤:
步骤S505a,调度器判断模块列表中是否还有待处理模块;如果有,则执行步骤S505b,如果没有,则执行步骤S506。
步骤S505b,调度器从模块列表中取一个最早添加的待处理模块。
步骤S505c,调度器判断处理器列表中是否还有Avaliable状态的Worker;如果有,则执行步骤S505d,如果没有,则执行步骤S506。
步骤S505d,调度器从处理器列表中取一个Avaliable状态的Worker。
步骤S505e,调度器将步骤S505b中的待处理模块分配给步骤S505d中的Worker进行分析处理操作。同时,将该待处理模块标记为“正在处理”状态,将该Worker标记为忙碌(Busy)状态。
步骤S506,调度器判断模块列表里的所有模块是否都是已处理状态;如果是,则执行步骤S508,如果否,则执行步骤S507。
步骤S507,调度器等待Worker的消息。这是一个异步的过程,调度器可能收到的消息包括:
1)FOUND_DEPENDENCY(发现依赖消息)
Worker在对待处理模块进行分析处理操作的过程中,会查找到与该模块依赖的其它模块。Worker不会在查找到所有有依赖关系的模块后再传递给调度器,而是一旦查找到一个有依赖关系的模块,就立即通过FOUND_DEPENDENCY消息告知调度器。调度器会将查找到的这个模块放入模块列表中,然后执行步骤S505。
2)ANALYSIS_FINISH(分析结束消息)
Worker在分析处理操作结束后,会通过ANALYSIS_FINISH告知调度器待处理模块分析结束,同时返回待处理模块的javascript代码。调度器会把该模块标记为“已处理”,把该Worker标记为Avaliable。然后执行步骤S508。
步骤S508,将模块列表里的所有模块进行打包,根据模块之间的依赖关系以及所有模块的javascript代码,生成项目构建文件。
在本实施例中,调度器与处理器之间通过异步消息通讯,并且充分利用CPU的多核处理能力,从而大大提高前端项目构建效率。
图6是本申请提出的处理器侧的前端项目构建方法的优选实施例的方法流程图,如图6所示,可以包括以下步骤:
步骤S601,处理器自身状态标记为Avaliable。处理器初始化不同文件类型的解析器(Loader),至少包括:javascript解析器(JsLoader)、jsx解析器(JsxLoader)、typescript(TsLoader)解析器。
步骤S602,等待调度器(Dispatcher)的消息,这是一个异步的过程,可能收到的消息包括:ANALYSIS_MODULE,该消息会通知处理器有一个待处理模块需要进行分析处理,同时会把待处理模块的文件路径传递过来。Worker通过文件路线确定该待处理模块,之后Worker标记自身状态为Busy。
步骤S603,处理器读取待处理模块的文件内容,判断待处理模块的文件需要哪种解析器进行处理。
如果待处理模块是js后缀名文件,则执行步骤S604a。
如果待处理模块是jsx后缀名文件,则执行步骤S604b。
如果待处理模块是ts后缀名文件,则执行步骤S604c。
步骤S604,调取解析器对待处理模块进行分析处理。具体地:
步骤S604a,将模块文件分为多块内容,Js解析器依次分析每一块内容,如果查找到与待处理模块有依赖关系的模块,则执行步骤S605。然后继续查找,直至查找到与待处理模块有依赖关系的所有模块。在Js解析器分析到文件尾后,执行步骤S606。
步骤S604b,将模块文件分为多块内容,Jsx解析器依次分析每一块内容,如果查找到与待处理模块有依赖关系的模块,则执行步骤S605。然后继续查找,直至查找到与待处理模块有依赖关系的所有模块。同时,Jsx解析器将模块文件的jsx语言转换成javascript语言,从而编译得到待处理模块的javascript代码。在Jsx解析器分析到文件尾后,执行步骤S606。
步骤S604c,将模块文件分为多块内容,Ts解析器依次分析每一块内容,如果查找到与待处理模块有依赖关系的模块,则执行步骤S605。然后继续查找,直至查找到与待处理模块有依赖关系的所有模块。同时,Ts解析器将模块文件的Ts语言转换成javascript语言,从而编译得到待处理模块的javascript代码。在Ts解析器分析到文件尾后,执行步骤S606。
步骤S605,处理器将查找到的与待处理模块有依赖关系的模块,通过FOUND_DEPENDENCY消息传递给调度器。
步骤S606,处理器传递ANALYSIS_FINISH消息给调度器,同时将待处理模块的javascript代码也一并传递。处理器将自身状态设置为Avaliable。
在本实施例中,处理器调用解析器对待处理模块进行分析处理,可以在查找与待处理模块有依赖关系的模块的同时,获取到待处理模块的javascript代码。处理器将查找结果与javascript代码均反馈至调度器,以利于调度器据此生成项目构建文件。从而有效缩短了操作流程,节省了前端项目构建时间。
基于与上述前端项目构建方法相同的发明构思,本申请提供一种前端项目构建装置,应用于调度器,如下面实施例所述。由于该前端项目构建装置解决问题的原理与前端项目构建方法相似,因此该前端项目构建装置的实施可以参见前端项目构建方法的实施,重复之处不再赘述。
图7是本申请所述前端项目构建装置一种实施例的结构示意图,如图7所示,所述装置可以包括:
模块获取单元10,用于获取前端项目的入口模块。模块获取单元10是前端项目构建装置中获取前端项目的入口模块的部分,可以是软件、硬件或二者的结合,例如可以是完成前端项目的入口模块获取功能的接口、处理芯片等元器件。
分配单元12,连接至模块获取单元10,用于将入口模块作为当前待处理模块,为其分配一个处理器以执行分析处理操作;其中,上述分析处理操作包括:查找与当前待处理模块有依赖关系的模块以及反馈当前待处理模块的javascript代码;将与当前待处理模块有依赖关系的模块均作为当前待处理模块,并行执行上述分析处理操作。分配单元12是前端项目构建装置中为模块分配处理器的部分,可以是软件、硬件或二者的结合,例如可以是完成处理器分配功能的接口、处理芯片等元器件。
文件生成单元14,连接至分配单元12,用于根据执行完成上述分析处理操作的所有模块的javascript代码以及所有模块之间的依赖关系,生成项目构建文件。文件生成单元30是前端项目构建装置中生成项目构建文件的部分,可以是软件、硬件或二者的结合,例如可以是完成文件打包构建功能的接口、处理芯片等元器件。
本实施例提供的前端项目构建装置,利用CPU的并行计算能力,大大节省了时间。调度器与处理器之间通过异步消息通讯,避免了消息等待过程。从而大大缩短了前端项目构建时间,提高了前端项目构建效率。
为了更好的管理待处理模块,本实施例提供了一种优选实施方式,即上述装置还可以包括:模块列表建立单元,用于建立初始为空的模块列表,将入口模块放入模块列表中。处理器列表建立单元,用于建立处理器列表;其中,处理器列表中的处理器状态初始为空闲状态,处理器的个数与CPU的核数相等。
上述装置还可以包括:状态设置单元,用于将执行分析处理操作的处理器的状态设置为忙碌状态;将执行完成分析处理操作的处理器的状态设置为空闲状态。从而准确掌握处理器的状态,便于分配单元12的分配工作的准确性和时效性。
基于与上述前端项目构建方法相同的发明构思,本申请提供一种前端项目构建装置,应用于处理器,如下面实施例所述。由于该前端项目构建装置解决问题的原理与前端项目构建方法相似,因此该前端项目构建装置的实施可以参见前端项目构建方法的实施,重复之处不再赘述。
图8是本申请所述前端项目构建装置一种实施例的结构示意图,如图8所示,所述装置可以包括:
指令接收单元20,用于接收调度器的操作指令;其中,上述操作指令中携带有待处理模块的文件路径;指令接收单元20是前端项目构建装置中接收调度器的操作指令的部分,可以是软件、硬件或二者的结合,例如可以是完成指令接收功能的接口、处理芯片等元器件。
处理单元22,连接至指令接收单元20,用于查找与上述待处理模块有依赖关系的模块;处理单元22是前端项目构建装置中查找依赖关系的部分,可以是软件、硬件或二者的结合,例如可以是完成查找功能的接口、处理芯片等元器件。
反馈单元24,连接至处理单元22,用于将查找结果和上述待处理模块的javascript代码反馈至上述调度器;其中,上述查找结果和上述javascript代码用于生成项目构建文件;反馈单元24是前端项目构建装置中查找结果和javascript代码反馈的部分,可以是软件、硬件或二者的结合,例如可以是完成信息反馈功能的接口、处理芯片等元器件。
本实施例提供的前端项目构建装置,利用CPU的并行计算能力,对待处理模块并行执行分析处理操作,大大节省了时间。调度器与处理器之间通过异步消息通讯,避免了消息等待过程。从而大大缩短了前端项目构建时间,提高了前端项目构建效率。
由于每个模块的文件类型可能并不相同,因此处理器需要根据待处理模块的文件类型,调用对应类型的解析器对模块文件进行解析,以查找与待处理模块有依赖关系的模块。基于此,本实施例提供了一种优选实施方式,图9是本申请所述处理单元一种实施例的结构示意图,如图9所示,上述处理单元22可以包括:类型确定模块220,用于确定与上述待处理模块的文件类型相对应的解析器;调用模块222,连接至类型确定模块220,用于调用上述解析器对上述待处理模块的文件进行分析,以查找与上述待处理模块有依赖关系的模块。
上述类型确定模块可以包括:第一子模块,用于在上述待处理模块的文件类型是js后缀名文件的情况下,确定对应的解析器为Js解析器;或者,第二子模块,用于在上述待处理模块的文件类型是jsx后缀名文件的情况下,确定对应的解析器为Jsx解析器,并编译得到上述待处理模块的javascript代码;或者,第三子模块,用于在上述待处理模块的文件类型是ts后缀名文件的情况下,确定对应的解析器为Ts解析器,并编译得到上述待处理模块的javascript代码。
图10是本申请所述反馈单元一种实施例的结构示意图,如图10所示,上述反馈单元24可以包括:第一反馈模块240,用于在查找到与上述待处理模块有依赖关系的模块之后,即时通过发现依赖消息向上述调度器反馈当前查找结果,直至查找到与上述待处理模块有依赖关系的所有模块;第二反馈模块242,连接至第一反馈模块240,用于将上述待处理模块的javascript代码通过分析结束消息反馈至上述调度器。基于此,处理器在向调度器反馈查找到的与待处理模块有依赖关系的所有模块的同时,又向调度器反馈待处理模块的javascript代码,简化了处理流程,节省了时间。
基于与上述前端项目构建装置相同的发明构思,本申请提供一种前端项目构建系统。图11是本申请所述前端项目构建系统一种实施例的结构示意图,如图11所示,所述系统可以包括:应用于调度器的前端项目构建装置,以及应用于处理器的前端项目构建装置。其中,调度器与多个处理器之间通过异步消息进行交互。从而节省处理时间,提高前端项目构建效率。
本申请可以依托于nodejs平台来实现,跟现有方案相比,本申请技术方案在保持webpack功能的同时,极大地提高构建过程的速度。
虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。当然,也可以将实现某功能的模块由多个子模块或子单元组合实现。
本申请中所述的方法、装置或模块可以以计算机可读程序代码方式实现控制器按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、MicrochipPIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本申请所述装置中的部分模块可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、类等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的硬件的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,也可以通过数据迁移的实施过程中体现出来。该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,移动终端,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。本申请的全部或者部分可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、移动通信终端、多处理器系统、基于微处理器的系统、可编程的电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。

Claims (19)

1.一种前端项目构建方法,应用于调度器,其特征在于,所述方法包括:
获取前端项目的入口模块;
将所述入口模块作为当前待处理模块,为其分配一个处理器以执行分析处理操作;其中,所述分析处理操作包括:查找与当前待处理模块有依赖关系的模块以及反馈当前待处理模块的javascript代码;将与当前待处理模块有依赖关系的模块均作为当前待处理模块,并行执行所述分析处理操作;
根据执行完成所述分析处理操作的所有模块的javascript代码以及所有模块之间的依赖关系,生成项目构建文件。
2.根据权利要求1所述的方法,其特征在于,还包括:
建立初始为空的模块列表,将所述入口模块放入所述模块列表中。
3.根据权利要求2所述的方法,其特征在于,还包括:
将与当前待处理模块有依赖关系的模块放入所述模块列表中;
依照先进先出原则,将所述模块列表中最早放入的模块作为当前待处理模块。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
建立处理器列表;其中,所述处理器列表中的处理器状态初始为空闲状态,所述处理器的个数与中央处理器CPU的核数相等。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将执行所述分析处理操作的处理器的状态设置为忙碌状态;
将执行完成所述分析处理操作的处理器的状态设置为空闲状态。
6.根据权利要求1所述的方法,其特征在于,所述调度器与多个所述处理器之间通过异步消息进行交互。
7.一种前端项目构建方法,应用于处理器,其特征在于,所述方法包括:
接收调度器的操作指令;其中,所述操作指令中携带有待处理模块的文件路径;
查找与所述待处理模块有依赖关系的模块;
将查找结果和所述待处理模块的javascript代码反馈至所述调度器;其中,所述查找结果和所述javascript代码用于生成项目构建文件。
8.根据权利要求7所述的方法,其特征在于,查找与所述待处理模块有依赖关系的模块,包括:
确定与所述待处理模块的文件类型相对应的解析器;
调用所述解析器对所述待处理模块的文件进行分析,以查找与所述待处理模块有依赖关系的模块。
9.根据权利要求8所述的方法,其特征在于,确定与所述待处理模块的文件类型相对应的解析器,至少包括:
如果所述待处理模块的文件类型是js后缀名文件,则确定对应的解析器为Js解析器;
如果所述待处理模块的文件类型是jsx后缀名文件,则确定对应的解析器为Jsx解析器,并编译得到所述待处理模块的javascript代码;
如果所述待处理模块的文件类型是ts后缀名文件,则确定对应的解析器为Ts解析器,并编译得到所述待处理模块的javascript代码。
10.根据权利要求7所述的方法,其特征在于,将查找结果和所述javascript代码反馈至所述调度器,包括:
在查找到与所述待处理模块有依赖关系的模块之后,即时通过发现依赖消息向所述调度器反馈当前查找结果,直至查找到与所述待处理模块有依赖关系的所有模块;
将所述待处理模块的javascript代码通过分析结束消息反馈至所述调度器。
11.一种前端项目构建装置,应用于调度器,其特征在于,所述装置包括:
模块获取单元,用于获取前端项目的入口模块;
分配单元,用于将所述入口模块作为当前待处理模块,为其分配一个处理器以执行分析处理操作;其中,所述分析处理操作包括:查找与当前待处理模块有依赖关系的模块以及反馈当前待处理模块的javascript代码;将与当前待处理模块有依赖关系的模块均作为当前待处理模块,并行执行所述分析处理操作;
文件生成单元,用于根据执行完成所述分析处理操作的所有模块的javascript代码以及所有模块之间的依赖关系,生成项目构建文件。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
模块列表建立单元,用于建立初始为空的模块列表,将所述入口模块放入所述模块列表中。
13.根据权利要求11所述的装置,其特征在于,所述装置还包括:
处理器列表建立单元,用于建立处理器列表;其中,所述处理器列表中的处理器状态初始为空闲状态,所述处理器的个数与中央处理器CPU的核数相等。
14.根据权利要求11所述的装置,其特征在于,所述装置还包括:
状态设置单元,用于将执行所述分析处理操作的处理器的状态设置为忙碌状态;将执行完成所述分析处理操作的处理器的状态设置为空闲状态。
15.一种前端项目构建装置,应用于处理器,其特征在于,所述装置包括:
指令接收单元,用于接收调度器的操作指令;其中,所述操作指令中携带有待处理模块的文件路径;
处理单元,用于查找与所述待处理模块有依赖关系的模块;
反馈单元,用于将查找结果和所述待处理模块的javascript代码反馈至所述调度器;其中,所述查找结果和所述javascript代码用于生成项目构建文件。
16.根据权利要求15所述的装置,其特征在于,所述处理单元包括:
类型确定模块,用于确定与所述待处理模块的文件类型相对应的解析器;
调用模块,用于调用所述解析器对所述待处理模块的文件进行分析,以查找与所述待处理模块有依赖关系的模块。
17.根据权利要求16所述的装置,其特征在于,所述类型确定模块包括:
第一子模块,用于在所述待处理模块的文件类型是js后缀名文件的情况下,确定对应的解析器为Js解析器;或者,
第二子模块,用于在所述待处理模块的文件类型是jsx后缀名文件的情况下,确定对应的解析器为Jsx解析器,并编译得到所述待处理模块的javascript代码;或者,
第三子模块,用于在所述待处理模块的文件类型是ts后缀名文件的情况下,确定对应的解析器为Ts解析器,并编译得到所述待处理模块的javascript代码。
18.根据权利要求15所述的装置,其特征在于,所述反馈单元包括:
第一反馈模块,用于在查找到与所述待处理模块有依赖关系的模块之后,即时通过发现依赖消息向所述调度器反馈当前查找结果,直至查找到与所述待处理模块有依赖关系的所有模块;
第二反馈模块,用于将所述待处理模块的javascript代码通过分析结束消息反馈至所述调度器。
19.一种前端项目构建系统,其特征在于,所述系统包括:权利要求11至14中任一项所述的应用于调度器的前端项目构建装置,以及权利要求15至18中任一项所述的应用于处理器的前端项目构建装置;其中,所述调度器与多个所述处理器之间通过异步消息进行交互。
CN201610153361.9A 2016-03-17 2016-03-17 一种前端项目构建方法、装置及系统 Active CN107203401B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610153361.9A CN107203401B (zh) 2016-03-17 2016-03-17 一种前端项目构建方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610153361.9A CN107203401B (zh) 2016-03-17 2016-03-17 一种前端项目构建方法、装置及系统

Publications (2)

Publication Number Publication Date
CN107203401A true CN107203401A (zh) 2017-09-26
CN107203401B CN107203401B (zh) 2020-11-06

Family

ID=59904075

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610153361.9A Active CN107203401B (zh) 2016-03-17 2016-03-17 一种前端项目构建方法、装置及系统

Country Status (1)

Country Link
CN (1) CN107203401B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107766036A (zh) * 2017-10-13 2018-03-06 深圳市金证科技股份有限公司 一种模块的构建方法、构建装置及终端设备
CN109324881A (zh) * 2018-08-22 2019-02-12 深圳点猫科技有限公司 一种前端编程项目的打包方法及电子设备
CN109634647A (zh) * 2018-12-25 2019-04-16 苏州思必驰信息科技有限公司 大型前端项目的构建方法及系统
CN109669683A (zh) * 2018-12-25 2019-04-23 福建南威软件有限公司 一种功能组件自动打包的方法
CN109857403A (zh) * 2018-12-05 2019-06-07 腾讯科技(深圳)有限公司 一种页面更新、页面处理方法及装置
CN109857397A (zh) * 2019-01-18 2019-06-07 泰康保险集团股份有限公司 项目构建的方法、装置和存储介质
CN110244940A (zh) * 2019-06-12 2019-09-17 四川长虹电器股份有限公司 优化web应用系统开发的方法及web前端项目结构
CN111309332A (zh) * 2020-02-11 2020-06-19 北京达佳互联信息技术有限公司 文件内容按需加载方法、装置及电子设备、存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090089765A1 (en) * 2007-09-28 2009-04-02 Xiaofeng Guo Critical section ordering for multiple trace applications
US7688737B2 (en) * 2007-03-05 2010-03-30 International Business Machines Corporation Latency hiding message passing protocol
CN103064954A (zh) * 2011-12-30 2013-04-24 微软公司 基于实体的搜索和解析
CN103207787A (zh) * 2012-01-12 2013-07-17 阿里巴巴集团控股有限公司 一种项目开发中数据包的加载方法及系统
CN104133685A (zh) * 2014-08-05 2014-11-05 广州唯品会网络技术有限公司 网站前端开发的方法与系统
CN104321782A (zh) * 2012-03-30 2015-01-28 爱迪德加拿大公司 web应用的安全执行
CN105138448A (zh) * 2014-06-05 2015-12-09 北京畅游天下网络技术有限公司 一种在前端测试页面的方法和装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7688737B2 (en) * 2007-03-05 2010-03-30 International Business Machines Corporation Latency hiding message passing protocol
US20090089765A1 (en) * 2007-09-28 2009-04-02 Xiaofeng Guo Critical section ordering for multiple trace applications
CN103064954A (zh) * 2011-12-30 2013-04-24 微软公司 基于实体的搜索和解析
CN103207787A (zh) * 2012-01-12 2013-07-17 阿里巴巴集团控股有限公司 一种项目开发中数据包的加载方法及系统
CN104321782A (zh) * 2012-03-30 2015-01-28 爱迪德加拿大公司 web应用的安全执行
CN105138448A (zh) * 2014-06-05 2015-12-09 北京畅游天下网络技术有限公司 一种在前端测试页面的方法和装置
CN104133685A (zh) * 2014-08-05 2014-11-05 广州唯品会网络技术有限公司 网站前端开发的方法与系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
余启洋: "嵌入式JavaScript引擎并行化研究与设计", 《中国优秀硕士学位论文全文数据库信息科技辑》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107766036A (zh) * 2017-10-13 2018-03-06 深圳市金证科技股份有限公司 一种模块的构建方法、构建装置及终端设备
CN109324881A (zh) * 2018-08-22 2019-02-12 深圳点猫科技有限公司 一种前端编程项目的打包方法及电子设备
CN109857403A (zh) * 2018-12-05 2019-06-07 腾讯科技(深圳)有限公司 一种页面更新、页面处理方法及装置
CN109857403B (zh) * 2018-12-05 2022-04-19 腾讯科技(深圳)有限公司 一种页面更新、页面处理方法及装置
CN109634647A (zh) * 2018-12-25 2019-04-16 苏州思必驰信息科技有限公司 大型前端项目的构建方法及系统
CN109669683A (zh) * 2018-12-25 2019-04-23 福建南威软件有限公司 一种功能组件自动打包的方法
CN109634647B (zh) * 2018-12-25 2022-02-01 思必驰科技股份有限公司 大型前端项目的构建方法及系统
CN109857397A (zh) * 2019-01-18 2019-06-07 泰康保险集团股份有限公司 项目构建的方法、装置和存储介质
CN110244940A (zh) * 2019-06-12 2019-09-17 四川长虹电器股份有限公司 优化web应用系统开发的方法及web前端项目结构
CN111309332A (zh) * 2020-02-11 2020-06-19 北京达佳互联信息技术有限公司 文件内容按需加载方法、装置及电子设备、存储介质

Also Published As

Publication number Publication date
CN107203401B (zh) 2020-11-06

Similar Documents

Publication Publication Date Title
CN107203401A (zh) 一种前端项目构建方法、装置及系统
CN106737676B (zh) 一种基于脚本可二次开发的工业机器人编程系统
WO2007113369A1 (en) Parallel program generation method
CN103995778A (zh) 一种基于事件和动作的脚本文件生成方法及其装置
Fauth et al. Automated generation of DSP program development tools using a machine description formalism
Zhong et al. Model-based parallelizer for embedded control systems on single-isa heterogeneous multicore processors
US8601454B2 (en) Device and method for automatically optimizing composite applications having orchestrated activities
CN104765787B (zh) 软件系统内要素文件关联关系分析方法及系统
Malmaud et al. TensorFlow. jl: An idiomatic Julia front end for TensorFlow
CN110209565A (zh) 一种元数据模型调试方法及其装置
CN101866373A (zh) 用于电子设计自动化的执行监视器
CN101794215B (zh) 一种汇编执行复杂任务的方法和装置
CN111275389A (zh) 运维作业创建、管理方法和装置
US9396239B2 (en) Compiling method, storage medium and compiling apparatus
JPH08263299A (ja) プログラム変換方法
CN110895460A (zh) 基于Jenkins的机器人系统集成方法、装置及终端设备
WO2008041442A1 (fr) Procédé de création de programme par parallélisation, dispositif de création de programme par parallélisation, et programme de création de programme par parallélisation
CN112114817B (zh) 基于cobol语言的数据字典字段信息获取方法及装置
CN111596923B (zh) Haxe静态链接库构建方法、装置和电子设备
CN112052035A (zh) 基于银行后线系统的版本组包方法及装置
US6948159B2 (en) Automatic compilation of electronic telecommunications system message generation code
Dumez et al. Formal specification and verification of service composition using LOTOS
CN112380205B (zh) 一种分布式架构的特征自动生成方法和系统
RU2786347C1 (ru) Способ автоматического создания параллельной программы с временной параметризацией многопроцессорных вычислительных систем с одинаковым доступом к памяти
Ihde et al. A Resource Manager for Advanced Resource Management and Allocation in Processes.

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20200925

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20200925

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant after: Advanced innovation technology Co.,Ltd.

Address before: Greater Cayman, British Cayman Islands

Applicant before: Alibaba Group Holding Ltd.

GR01 Patent grant
GR01 Patent grant