模块化JavaScript文件处理方法、设备和服务器与流程

文档序号:13625716阅读:192来源:国知局
模块化JavaScript文件处理方法、设备和服务器与流程

本发明涉及javascript技术领域,更具体地,涉及一种用于处理模块化javascript文件的方法、用于处理模块化javascript文件的设备、处理服务器和web服务器。



背景技术:

随着互联网的飞速发展,前端开发越来越复杂。模块化开发可以解决繁琐的文件依赖问题,同时也提高了代码的维护性。

通常,设计人员将产生的javascript代码发送给处理服务器。处理服务器将javascript文件打包到一起并将其发送给web服务器。设计人员也可以直接使用自己的计算机将javascript文件打包到一起并将其发送给web服务器,在这种情况下,设计人员的计算机也可以被认为是处理服务器。当用户访问网站时,web服务器会将打包的javascript文件和html文件一起发送给用户的终端设备。终端设备通过网络获取javascript文件和html文件。终端设备运行javascript文件,以实现相应的功能。

在现有技术中,由于一个javascript模块可能会引用其他javascript模块,因此,为了在终端设备能够运行期望的javascript文件,而不产生错误,通常,服务器将所有的javascript模块打包成一个javascript文件发送给终端设备,其中,某些javascript模块可能是当前终端设备所不需要的。

当部分javascript模块被更新时,服务器需要重新将所有的javascript模块打包,并将整个打包后的文件发送给终端设备。在移动互联网的情况下,这可能会耗费用户的流量,并且占用较多的下载时间。

终端设备在运行javascript文件时,需要首先对javascript文件进行解析并获取javascript文件的依赖关系表。这会增加页面加载的加载时间和/或白屏时间。此外,在现有技术中,通常以人工的方式产生依赖关系表。这种方式的效率较低。

因此,需要提供一种新的技术方案,针对上述现有技术中的至少一个技术问题进行改进。



技术实现要素:

本发明的一个目的是提供一种用于模块化javascript开发的新技术方案。

根据本发明的第一方面,提供了一种用于处理模块化javascript文件的方法,包括:获取通过模块化方式形成的原始javascript文件;将该javascript文件转化为第一抽象语法树的形式;对于第一抽象语法树中的至少一个节点执行如下处理中的至少一个,以得到第二抽象语法树:如果节点包含leadingcomments和trailingcomments,则获取相应的require的参数,如果节点的类型是expressionstatement并且包含require标识,则获取相应的require的参数并将该节点从第一抽象语法树删除,如果节点的类型不是expressionstatement并且包含require标识,则获取相应的require的参数,根据所述参数生成新的节点并用该新的节点替换当前的节点,和如果节点包含exports标识,则根据原始javascript文件的当前文件路径生成新的节点;以及利用第二抽象语法树生成转换的javascript文件,用于发送给用户的终端设备。

优选地,利用第二抽象语法树生成转换的javascript文件还包括:为第二抽象语法树添加闭包。

优选地,为第二抽象语法树添加闭包还包括:生成闭包的抽象语法树,作为第三语法树;将第二抽象语法树中添加添加到第三抽象语法树中,以生成第四抽象语法树;以及将第四抽象语法树转化为javascript文件,作为所述转换的javascript文件。

优选地,对于第一抽象语法树中的至少一个节点执行如下处理中的至少一个以得到第二抽象语法树包括:遍历抽象语法树中的全部节点以得到第二抽象语法树。

优选地,对于第一抽象语法树中的至少一个节点执行如下处理中的至少一个以得到第二抽象语法树还包括:通过获取相应的require的参数而生成javascript文件的依赖关系表。

优选地,为通过模块化方式形成的多个原始javascript文件分别生成多个转换的javascript文件。

优选地,基于所述依赖关系表,在网页文件嵌入网页文件所需的javascript文件的依赖关系信息;或者基于所述依赖关系表,生成网页文件所需的javascript文件的依赖关系子表并将该依赖关系子表与该网页文件关联。

优选地,由服务器离线生成所述转换的javascript文件。

优选地,基于所述依赖关系表,单独地更新所述多个转换的javascript文件中的至少一个。

根据本发明的第二方面,一种用于处理模块化javascript文件的设备,包括:用于获取通过模块化方式形成的原始javascript文件的装置;用于将该javascript文件转化为第一抽象语法树的形式的装置;用于对于第一抽象语法树中的至少一个节点执行如下处理中的至少一个,以得到第二抽象语法树的装置:如果节点包含leadingcomments和trailingcomments,则获取相应的require的参数;如果节点的类型是expressionstatement并且包含require标识,则获取相应的require的参数并将该节点从第一抽象语法树删除;如果节点的类型不是expressionstatement并且包含require标识,则获取相应的require的参数,根据所述参数生成新的节点并用该新的节点替换当前的节点;和如果节点包含exports标识,则根据原始javascript文件的当前文件路径生成新的节点;以及用于利用第二抽象语法树生成转换的javascript文件以用于发送给用户的终端设备的装置。

根据本发明的第三方面,一种处理服务器,包括根据本公开中的实施例的用于处理模块化javascript文件的设备,或者包括存储器和处理器,其中,所述存储器存储可执行指令,所述可执行指令在所述服务器运行时控制所述处理器执行根据本公开中的实施例的用于处理模块化javascript文件的方法中的操作。

根据本发明的第四方面,一种web服务器,用于获取基于所述用于处理模块化javascript文件的方法所生成的转换的javascript文件,其中,所述web服务器基于依赖关系表,独立地向终端设备更新所述多个转换的javascript文件中的至少一个。

根据本公开的一个实施例,可以减少终端设备对javascript文件的处理成本,从而提升用户使用体验。

通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

被结合在说明书中并构成说明书的一部分的附图示出了本发明的实施例,并且连同其说明一起用于解释本发明的原理。

图1示出了根据本公开的一个实施例的方法的示意性流程图。

图2示出了根据本公开的另一个实施例的服务器的示意性框图。

图3示出了根据本公开的另一个实施例的服务器的示意性框图。

图4示出了根据本公开的一个例子的的示意图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

下面,参照附图描述根据本发明的各个实施例和例子。

<方法>

图1示出了根据本公开的一个实施例的用于处理模块化javascript文件的方法的示意性流程图。

如图1所示,在步骤s1100,获取通过模块化方式形成的原始javascript文件。

这里,技术人员仍然可以使用模块化的方式编写javascript代码,从而利用模块化开发所带来的好处。本实施例的技术方案不会对技术人员的代码编写工作造成影响。当技术人员将代码提供给服务器之后,可以自动对代码进行处理,以实现这个实施例中的技术方案。

通常,技术人员在开发时会产生多个原始javascript文件。可以分别对每个javascript文件执行本实施例中的处理。

在步骤s1200,将该javascript文件转化为第一抽象语法树的形式。

如何将javascript文件转化为抽象语法树是本领域已知的并且不是本实施例所关注的。因此,在这里省略对它的详细描述。

在步骤s1300,对于第一抽象语法树中的至少一个节点执行如下处理中的至少一个,以得到第二抽象语法树:

如果节点包含leadingcomments和trailingcomments,则获取相应的require的参数;

如果节点的类型是expressionstatement并且包含require标识,则获取相应的require的参数并将该节点从第一抽象语法树删除;

如果节点的类型不是expressionstatement并且包含require标识,则获取相应的require的参数,根据所述参数生成新的节点并用该新的节点替换当前的节点;和

如果节点包含exports标识,则根据原始javascript文件的当前文件路径生成新的节点。

在一个例子中,可以遍历抽象语法树中的全部节点以得到第二抽象语法树。换句话说,可以对原始javascript文件整体进行处理,以生成新的经转换的javascript文件,供用户使用。

在上面的处理中,由于对require的参数进行识别和处理,因此,可以获得相应的依赖关系。因此,可以通过获取相应的require的参数而生成javascript文件的依赖关系表。

在步骤s1400,利用第二抽象语法树生成转换的javascript文件,用于发送给用户的终端设备。

例如,通常情况下,技术人员会为一个网站开发多个原始javascript文件或者一个网站需要用到多个原始javascript文件。在这种情况下,可以为通过模块化方式形成的多个原始javascript文件分别生成多个转换的javascript文件。

可以利用第二抽象语法树直接生成转换的javascript文件,也可以对第二抽象语法树进行进一步的处理而生成转换的javascript文件。

例如,可以为第二抽象语法树添加闭包。在一个例子中,可以首先生成闭包的抽象语法树,作为第三语法树。接着,将第二抽象语法树中添加添加到第三抽象语法树中,以生成第四抽象语法树。最后,将第四抽象语法树转化为javascript文件,作为所述转换的javascript文件。

通过这个实施例,可以在转换javascript文件的同时,自动获取javascript文件的依赖关系表。基于所述依赖关系表,在网页文件嵌入网页文件所需的javascript文件的依赖关系信息。这样,当用户访问网页时,web服务器可以将网页文件(例如html文件)和相应的javascript文件发送给用户的终端设备。可选地,基于所述依赖关系表,生成网页文件所需的javascript文件的依赖关系子表并将该依赖关系子表与该网页文件关联。在这种情况下,web服务器可以将所述依赖关系子表作为一个单独的文件发送给用户的终端设备。

可以由服务器离线生成所述转换的javascript文件。这样,终端设备可以直接获取这样处理的转换的javascript文件,从而减少终端设备所需的处理,并提升用户使用体验。

在这里,每个javascript文件被单独地转换,并且可以独立地被发送给终端设备。因此,可以基于所述依赖关系表,单独地更新所述多个转换的javascript文件中的至少一个。

由于在将javascript文件发送给用户的终端设备以供用户使用之前,对javascript文件进行处理,因此,可以减少在终端设备生成依赖关系表吧处理,从而可以节省终端设备加载网页的时间和/或白屏时间。

在这里,由于可以在服务器自动生成依赖关系表,并将依赖关系发送给用户,因此,可以单独更新多个javascript文件的一个或多个,而不必将所有javascript文件打包在一起发送给终端设备。因此,这可以节省用户的流量。

此外,终端设备可以直接利用所接收到的依赖关系。这有利于终端设备加载网页。

<设备>

本领域技术人员应当理解,在电子技术领域中,可以通过软件、硬件以及软件和硬件结合的方式,将上述方法体现在产品中本领域技术人员很容易基于上面公开的方法,产生一种用于处理模块化javascript文件的设备。所述设备可以包括用于执行前面所述的实施例中的用于处理模块化javascript文件的方法中的各个步骤的装置。例如,所述设备包括:用于获取通过模块化方式形成的原始javascript文件的装置;用于将该javascript文件转化为第一抽象语法树的形式的装置;用于对于第一抽象语法树中的至少一个节点执行如下处理中的至少一个,以得到第二抽象语法树的装置:如果节点包含leadingcomments和trailingcomments,则获取相应的require的参数,如果节点的类型是expressionstatement并且包含require标识,则获取相应的require的参数并将该节点从第一抽象语法树删除,如果节点的类型不是expressionstatement并且包含require标识,则获取相应的require的参数,根据所述参数生成新的节点并用该新的节点替换当前的节点,和如果节点包含exports标识,则根据原始javascript文件的当前文件路径生成新的节点;以及用于利用第二抽象语法树生成转换的javascript文件的装置。

本领域技术人员公知的是,随着诸如大规模集成电路技术的电子信息技术的发展和软件硬件化的趋势,要明确划分计算机系统软、硬件界限已经显得比较困难了。因为,任何操作可以软件来实现,也可以由硬件来实现。任何指令的执行可以由硬件完成,同样也可以由软件来完成。对于某一机器功能采用硬件实现方案还是软件实现方案,取决于价格、速度、可靠性、存储容量、变更周期等非技术性因素。对于技术人员来说,软件实现方式和硬件实现方式是等同的。技术人员可以根据需要选择软件或硬件来实现上述方案。因此,这里不对具体的软件或硬件进行限制。

<服务器>

图2示出了根据本公开的另一个实施例的服务器的示意性框图。如图2所示,服务器2000包括模块化js文件处理设备2010。模块化js文件处理设备2010例如可以是前面所述的用于处理模块化javascript文件的设备。

图3还示出了根据本公开的另一个实施例的服务器的示意性框图。如图3所示,服务器3000可以包括处理器3010、存储器3020、接口装置3030、通信装置3040、显示装置3050、输入装置3060、扬声器3070、麦克风3080,等等。

处理器3010例如可以是中央处理器cpu、微处理器mcu等。存储器3020例如包括rom(只读存储器)、ram(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置3030例如包括usb接口、耳机接口等。

通信装置3040例如能够进行有有线或无线通信。

显示装置3050例如是液晶显示屏、触摸显示屏等。输入装置3060例如可以包括触摸屏、键盘等。用户可以通过扬声器3070和麦克风3080输入/输出语音信息。

图3所示的服务器仅是解释性的,并且决不是为了要限制本发明、其应用或用途。

在这个实施例中,所述存储器3020用于存储指令,所述可执行指令在所述服务器运行时控制所述处理器执行根据任何一个实施例所述的用于处理模块化javascript文件的方法中的操作。本领域技术人员应当理解,尽管在图3中示出了多个装置,但是,本发明可以仅涉及其中的部分装置,例如,处理器3010和存储装置3020等。技术人员可以根据本发明所公开方案设计指令。指令如何控制处理器进行操作,这是本领域公知,故在此不再详细描述。

目前电子设备的配置越来越灵活。这里的服务器可以是专用的,也可以是设计人员的编程计算机。此外,如背景技术所述,通常设计人员将程序代码发送给处理服务器,接着处理服务器将处理后的代码发送给web服务器。用户可以通过web服务器访问网页。这里的服务器2000、3000可以是所述处理服务器,并将所生成的转换的javascript文件发送给另外的web服务器。可选地,处理服务器和web服务器可以是结合在一起的。在这种情况下,所述服务器2000、3000既是处理服务器也是web服务器。

此外,web服务器可以直接或间接获取基于前面所述的用于处理模块化javascript文件的方法所生成的转换的javascript文件,并基于依赖关系表,独立地向终端设备更新所述多个转换的javascript文件中的至少一个。

<例子>

图4示出了根据本公开的一个例子的的示意图。

如图4所示,设计人员的编程计算机4020、处理服务器4030、web服务器4040和用户的终端设备4050通过网络4010连接。

网络4010可以是有线网络、无线网络或者二者的混合。

设计人员的编程计算机4020可以与处理服务器4030结合在一起。可选地,处理服务器4030和web服务器4040可以结合在一起。

通常来说,设计人员使用编程计算机4020编写程序代码。接着,设计人员将程序代码发送给处理服务器4030。处理服务器4030将处理后的文件发送给web服务器4040。用户可以使用终端设备4050访问web服务器4040中的网页。

一般,可以在处理服务器4030实现本公开中的实施例。但是,如前面所述,也可以在编程计算机4020或web服务器4040实现所述实施例。

通过本公开的技术方案,可以将通过模块化方式形成的javascript文件转化为闭包和命名空间挂载的模块化方案。通过这种方式可以实现细粒度的模块化方案。

具体来说,可以由处理服务器4030离线对即将供用户访问的网页中的javascript文件进行处理。这里,对于服务器的处理来说,所述javascript文件是原始javascript文件。所述原始javascript文件是采用模块化方式开发的。一个网站通常需要多个javascript文件。可以针对每一个原始javascript文件执行本公开的实施例中的处理。

首先,获取原始javascript文件。接着,可以通过代码将其转化为第一抽象语法树。

然后,遍历第二抽象语法树,对它的每个节点执行如下处理:

a、如果节点包含leadingcomments和trailingcomments,则获取相应的require的参数;

b、如果节点的类型是expressionstatement并且包含require标识,则获取相应的require的参数并将该节点从第一抽象语法树删除;

c、如果节点的类型不是expressionstatement并且包含require标识,则获取相应的require的参数,根据所述参数生成新的节点并用该新的节点替换当前的节点;和

d、如果节点包含exports标识,则根据原始javascript文件的当前文件路径生成新的节点。

在进行上述处理的同时,可以通过获取相应的require的参数而生成javascript文件的依赖关系表。

在遍历操作结束之后,可以得到一个新的抽象语法树,即,第二抽象语法树。另外,可以生成一个闭包的抽象语法树,作为第三语法树。将第二抽象语法树中添加添加到第三抽象语法树中,以生成第四抽象语法树。接着,将第四抽象语法树转化为javascript文件,作为所述转换的javascript文件。

处理服务器4030可以将所述转换的javascript文件和依赖关系表发送给web服务器4040。web服务器4040根据所述依赖关系表注入到网页文件中。当用户访问网页时,web服务器4040将网页文件和相应的javascript文件发送给用户。web服务器4040可以基于所述依赖关系表确定每个网页所需的javascript文件。web服务器4040可以独立地发送所述javascript文件中的一个或多个,而不必将它们全部打包在一起。

终端设备4050接收网页文件和相应的javascript文件,并对它们进行处理以显示。由于通过这里的方案可以至少部分地减少终端设备405生成依赖关系的时间,因此,可以减少加载网页的时间和/或白屏时间。此外,当部分javascript文件需要更新时,可以仅由web服务器4040将需要更新的文件发送给终端设备4050。这可以减少网络传输的通信量。在移动互联网应用的情况下,这是特别有利的。

本发明可以是设备、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本发明的范围由所附权利要求来限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1