会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电脑图像 / 渲染 / 一种模板的渲染方法及装置

一种模板的渲染方法及装置

阅读:813发布:2021-02-26

IPRDB可以提供一种模板的渲染方法及装置专利检索,专利查询,专利分析的服务。并且本申请公开了一种模板的渲染方法及装置,该方法为:根据用户的网页浏览请求,获取对应的模板并生成相应的Java类文件,其中,将模板内已确定的变量类型和/或变量操作方法采用Java直接调用方式进行调用;然后,执行所述Java类文件生成相应的网页页面,向用户返回所述网页页面。这样,将会有效地提升模板转换时的代码执行效率,提升服务平台的每秒的查询数目,减少响应时间,从而降低系统Java虚拟机垃圾回收,进而能够提高整个应用系统的性能,解决模板渲染引起的性能瓶颈。,下面是一种模板的渲染方法及装置专利的具体信息内容。

1.一种模板的渲染方法,其特征在于,包括:

接收用户的网页浏览请求,确定该网页浏览请求对应的模板;

基于所述模板生成相应的Java类文件,其中,将模板内已确定的变量类型和/或变量操作方法采用Java直接调用方式进行调用,将模板内未确定的变量类型和/或变量操作方法则采用Java反射机制进行调用;

执行所述Java类文件,生成相应的网页页面;

向用户返回所述网页页面。

2.如权利要求1所述的方法,其特征在于,基于所述模板生成相应的Java类文件,包括:读取Velocity模板;

采用Java词法分析方式将读取的Velocity模板解析为Velocity语法树,其中,Velocity模板中包含的每一个Velocity语法对应Velocity语法树上的一个对象节点;

遍历所述Velocity语法树中的每一个对象节点,将每一个对象节点解析为相应的Java语法,以将所述Velocity语法树转换为相应的Java语法树;

将所述Java语法树封装为相应的Java类文件。

3.如权利要求2所述的方法,其特征在于,采用Java词法分析方式将读取的模板解析为语法树的过程中,将模板中包含的静态数据转化为字节型数据。

4.如权利要求2所述的方法,其特征在于,采用Java词法分析方式将读取的模板解析为语法树的过程中,确定模板中存在连续的多个空格字符时,仅保存一个空格字符,或/和,将模板中全部的制表字符删除。

5.如权利要求1-4任一项所述的方法,其特征在于,执行所述Java类文件,生成相应的网页页面,包括:对获得的Java类文件进行加载;

基于加载后的Java类文件创建相应的Java对象;

执行已创建的Java对象,生成相应的网页页面。

6.如权利要求5所述的方法,其特征在于,执行所述Java类文件,生成相应的网页页面的过程中,对所述Java类文件的执行过程进行监测,根据监测结果确认能够确定所述Java类文件中部分/全部采用Java反射机制调用的变量类型和/或变量操作方法时,在下一次接收到相同的网页浏览请求并生成相应的Java类文件的过程中,采用Java直接调用方式对重新确定的变量类型和变量操作方式进行调用。

7.一种模板的渲染装置,其特征在于,包括:

接口单元,用于接收用户的网页浏览请求,并确定该网页浏览请求对应的模板,以及向用户返回该模板对应的网页页面;

第一控制单元,用于基于所述模板生成相应的Java类文件,其中,将模板内已确定的变量类型和/或变量操作方法采用Java直接调用方式进行调用,将模板内未确定的变量类型和/或变量操作方法则采用Java反射机制进行调用;

第二控制单元,执行所述Java类文件,生成相应的网页页面。

8.如权利要求7所述的装置,其特征在于,所述第一控制单元基于所述模板生成相应的Java类文件时,读取Velocity模板,采用Java词法分析方式将读取的Velocity模板解析为Velocity语法树,其中,Velocity模板中包含的每一个Velocity语法对应Velocity语法树上的一个对象节点,以及遍历所述Velocity语法树中的每一个对象节点,将每一个对象节点解析为相应的Java语法,以将所述Velocity语法树转换为相应的Java语法树,并将所述Java语法树封装为相应的Java类文件。

9.如权利要求8所述的装置,其特征在于,所述第一控制单元采用Java词法分析方式将读取的Velocity模板解析为Velocity语法树的过程中,对于Velocity模板中包含的静态数据转化为字节型数据。

10.如权利要求8所述的装置,其特征在于,所述第一控制单元采用Java词法分析方式将读取的模板解析为语法树的过程中,确定模板中存在连续的多个空格字符时,仅保存一个空格字符,或/和,将模板中全部的制表字符删除。

说明书全文

一种模板的渲染方法及装置

技术领域

[0001] 本申请涉及网络技术领域,特别涉及一种模板的渲染方法及装置。

背景技术

[0002] Velocity是一种基于Java的模板引擎(template engine),是一种动态模板编程语言,它允许任何人仅仅简单地使用模板语言(template language)来引用由Java代码定义的对象。
[0003] Velocity主要应用于网页的前端展示,即根据对后端的Java对象的渲染生成一个HTML网页,其中,对Java对象(如,网页源代码)的渲染实际上是通过Java反射机制来实现的。所谓Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;即对Java对象进行详细的代码解释。Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法,生成动态代理。由此可见,执行Java反射机制要比执行Java直接调用方法慢很多。
[0004] 目前,Velocity模板因为语法简单、使用方便而被广泛使用于互联网应用系统中。然而,当系统的访问量达到几亿级别时,若Velocity模板采用Java反射机制来进行Java对象的渲染以生成HTML网页,就会令渲染操作占用系统整个RT(Response Time,响应时间)中的大部分,从而令Velocity模板的渲染成为一个系统性能的执行瓶颈,因为执行Velocity模板的渲染会导致系统的GC(Java虚拟机垃圾回收)频繁,进而严重降低系统的执行效率。

发明内容

[0005] 本申请实施例提供一种模板的渲染方法及装置,用以提高Velocity模板的渲染操作的执行效率,进而提升系统性能。
[0006] 本申请实施例提供的具体技术方案如下:
[0007] 一种模板的渲染方法,包括:
[0008] 接收用户的网页浏览请求,确定该网页浏览请求对应的模板;
[0009] 基于所述模板生成相应的Java类文件,其中,将模板内已确定的变量类型和/或变量操作方法采用Java直接调用方式进行调用,将Velocity模板内未确定的变量类型和/或变量操作方法则采用Java反射机制进行调用;
[0010] 执行所述Java类文件,生成相应的网页页面;
[0011] 向用户返回所述网页页面。
[0012] 一种模板的渲染装置,包括:
[0013] 接口单元,用于接收用户的网页浏览请求,并确定该网页浏览请求对应的模板,以及向用户返回该模板对应的网页页面;
[0014] 第一控制单元,用于基于所述模板生成相应的Java类文件,其中,将模板内已确定的变量类型和/或变量操作方法采用Java直接调用方式进行调用,将模板内未确定的变量类型和/或变量操作方法则采用Java反射机制进行调用;
[0015] 第二控制单元,执行所述Java类文件,生成相应的网页页面。
[0016] 本申请实施例中,重新实现了Velocity语法功能,即重新实现了一个全新的素描框架(Sketch架构),在此Sketch架构中,可以根据用户发送的网页浏览请求,尽量采用Java直接调用方式将用户请求的Velocity模板转换为相应的Java类文件,这样,将会有效地提升Velocity模板转换时的代码执行效率,提升服务平台的每秒的查询数目),减少响应时间,从而降低系统Java虚拟机垃圾回收,进而能够提高整个应用系统的性能,解决Velocity模板渲染引起的性能瓶颈。

附图说明

[0017] 图1为本申请实施例中服务平台功能结构示意图;
[0018] 图2为本申请实施例中服务平台进行Velocity模板渲染流程图;
[0019] 图3为本申请实施例中Velocity语法树结构示意图。

具体实施方式

[0020] 为了提高模板的渲染效率,本申请实施例中,在根据用户发送的网页浏览请求对模板进行渲染时,尽量避免采用Java反射机制,而是采用Java直接调用方式将模板转化为相应的Java类文件,并执行该Java类文件生成用户所需的网页页面,从而提高了代码的执行效率。
[0021] 其中,所谓的Velocity模板(也可简称为vm模板),是指按照Velocity语法写成的网页代码文件,即网页的源代码。浏览器是不能够直接解析网页源代码的,需要将网页的源代码经过渲染操作转换为相应的HTML网页;因此,所谓的Velocity模板的渲染,即是将Velocity语法写的网页代码文件经过渲染处理生成相应的HTML网页,从而通过浏览器呈现给用户。
[0022] 下面结合附图对本申请优选的实施方式进行详细说明。
[0023] 参阅图1所示,本申请实施例中,服务平台是基于Sketch架构运行的,主要包括三个部分,接口单元10、第一控制单元11和第二控制单元12,其中,
[0024] 接口单元10,用于接收用户的网页浏览请求,并确定该网页浏览请求对应的Velocity模板,以及向用户返回该Velocity模板对应的网页页面;
[0025] 具体而言,接口单元10即是完成了Sketch框架与MVC(Model View Controller,模型界面控制器)框架的整合,提供了Web框架通过MVC框架调用Velocity模板进行渲染时所用的接口,以及将渲染后的网页页面发送给请求的用户端。
[0026] 第一控制单元11,用于基于确定的Velocity模板生成相应的Java类文件,其中,将Velocity模板内已确定的变量类型和/或变量操作方法采用Java直接调用方式进行调用,将Velocity模板内未确定的变量类型和/或变量操作方法则采用Java反射机制进行调用;
[0027] 具体而言,第一控制单元11适用于编译时环境。当用户第一次请求某Velocity模板时,第一控制单元11会加载Velocity模板初始化语法树,并编译成原始的Java类文件,这个Java类文件中部分/全部对象的方法调用仍然可能是通过Java反射机制调用的,而在后续Velocity模板被第二控制单元12真正执行时,其包含的变量类型和/或变量操作方法将会被第二控制单元12监测并记录下来,当第一控制单元11根据监测结果确认已能够确定通过Java反射机制调用的变量类型或/和变量操作方法时,将会采用Java直接调用方式对这部分内容进行重新编译。
[0028] 第二控制单元12,用于执行所述Java类文件,生成相应的网页页面。
[0029] 具体而言,第二控制单元12适用于运行时环境。运行时环境主要保存的是当前各个Velocity模板对应的Java类文件,也称为Java实例对象,当用户请求执行某个Velocity模板时,第二控制单元12将会调用与之对应的Java类文件执行;Velocity模板在运行状态下,第二控制单元12发现其中的某些变量类型和/或变量操作方法已经能够确定时,则将会通知第一控制单元11对这部分内容进行重新编译。
[0030] 以此类推,经过多次调用及优化后,Velocity模板中包含的所有变量类型和/或变量操作方法都会被确定,并均采用Java直接调用方式进行调用,这样,将会大大地提高Velocity模板转换为网页页面过程中,代码的执行效率。
[0031] 基于上述技术方案,参阅图2所示,本申请实施例中,服务平台对Velocity模板进行渲染的详细流程如下:
[0032] 步骤200:服务平台接收用户的网页浏览请求,确认该网页浏览请求对应的Velocity模板。
[0033] 通常,用户的网页浏览请求中均携带有用户指定的URL地址,服务平台便可以根据该URL地址确定相应的Velocity模板。
[0034] 获得Velocity模板后,服务平台便可以开始对Velocity模板进行渲染,以获得最终呈现给用户的HTML页面。
[0035] 步骤210:服务平台基于确定的Velocity模板生成相应的Java类文件,在此过程中,服务平台将Velocity模板内已确定的变量类型和/或变量操作方法采用Java直接调用方式进行调用,将Velocity模板内未确定的变量类型和/或变量操作方法则采用Java反射机制进行调用。
[0036] 步骤220:服务平台执行获得的Java类文件,生成相应的网页页面:
[0037] 具体为:服务平台通过新建classloader(类加载)对获得的Java类文件进行加载,并基于加载后的Java类文件创建相应的Java对象,以及执行已创建的Java对象,生成相应的网页页面,即服务平台将Java类文件加载至Sketch架构中,并在Sketch架构中管理这些Java类文件对应的对象。
[0038] 步骤230:服务平台向用户返回其请求的网页页面。
[0039] 在上述实施例中,在执行步骤210,具体可以采用以下方式实现:
[0040] (1)服务平台读取保存的Velocity模板。
[0041] 服务平台读取保存的Velocity模板时,可以是在没有接收到用户的网页浏览请求时,基于管理人员的指示自行读取,也可以是接收到用户第一次请求某一HTML页面的网页浏览请求时,即确定对应用户请求的Velocity模板未保存有相应的Java类文件时,自行读取。
[0042] (2)采用Java词法分析方式(如,采用JavaCC词法分析器)将读取的Velocity模板解析为一个Velocity语法树,其中,Velocity模板中包含的每一个Velocity语法对应Velocity语法树上的一个对象节点。
[0043] 另一方面,在将Velocity模板解析为Velocity语法树的过程中,为了进一步提高执行效率,对于Velocity模板中包含的静态数据,可以将其转化为字节型数据,即byte[],而不是字符串型数据,即String或者字符型数据,即char[]。所谓的静态数据就是Velocity模板中包含的一些HTML代码,这些HTML代码在页面渲染时不会改变,而是原样输出到用户的浏览器里如:<!doctype html>。
[0044] 这是因为,现有技术中,Velocity模板的渲染结果通常是String类型,服务平台获得渲染结果后需要调用输出方法response.getWriter()将渲染结果返回给用户的浏览器,返回的内容在经过网络传输时要经过编码将String类型的数据转换为byte类型的数据才能传输至用户的浏览器进行呈现,而将String类型数据转换为byte类型数据是一种非常耗时的操作,而用户请求的网页页面中大部分都是不变的静态数据,因此,对于这一部分静态数据,服务平台可以在进行Velocity模板渲染的过程中预先转换为byte类型数据,这样,在后续向用户的浏览器传输网页页面时,就可以省去静态数据从String类型数据转换为byte类型数据这一操作,从而大大缩短了网页页面的传输及呈现时间,进而提升系统的执行性能。
[0045] 同时,在Velocity模板渲染的过程中,可以将Velocity模板中包含的大量的空格字符或者Tab(制表)字符进行过滤,这部分内容并不会影响网页页面的呈现效果,但是却占用了一定的网络传输带宽,因此,较佳的,服务平台可以在Velocity模板渲染过程中,将连续的多个空格字符进行过滤,仅保存一个空格字符,或/和,将全部的Tab字符删除,从而能够有效减少网络传输的数据量。
[0046] 上述过滤操作的代码具体如下,过滤后生成的Velocity语法树如图3所示。
[0047]
[0048] (3)对生成的Velocity语法树进行遍历,转换为相应的Java语法树。
[0049] 例如,基于Velocity模板解析生成相应的语法树后,按照深度遍历算法遍历这个Velocity语法树,将每一个对象节点解析成对应的Java语法,从而这个整个Velocity语法树转换为对应的Java语法树。
[0050] 例如,将Velocity语法树转换为Java语法树的实现代码如下:
[0051]
[0052]
[0053]
[0054] (4)将获得的Java语法树封装为相应的Java类文件。
[0055] 下面采用具体的应用实施对上述流程作出进一步详细介绍。
[0056] 当服务平台第一次接收到用户发送的某一个网面浏览请求时,第二控制单元12会内的sketchEngine会在存储区域的RuntimeContex集合中查找相应的Velocity模板实例,若确认不存在上述Velocity模板实例,则第二控制单元12会通知第一控制单元11进行编译,然后,第一控制单元11内的RuntimeServer就会创建新的Velocity模板实例和编译时环境类,并根据创建的Velocity模板实例生成Velocity语法树,然后在确定对应Velocity模板实例没有创建相应的运行时模板实例(即Java类文件),第一控制单元11内的SketchTemplateInstance将会生成Velocity模板对应的Java类文件,并且编译及执行这个Java类文件。
[0057] 在执行Java类文件的过程中,第二控制单元12会对Java类文件内包含的变量类型以及变量操作方法进行记录和跟踪,以便于进行二次编译优化。具体为:
[0058] 在将Velocity模板转换为Java类文件的过程中,Velocity模板中包含的变量类型和/或变量操作方法有时不能够全部确定,对于这种情况,服务平台可以将已确定的变量类型和/或变量操作方法采用Java直接调用方式进行调用,即在解析出的Java语法中直接写出变量名称和变量操作方法的名称,而对于未确定的变量类型和/或变量操作方法则采用Java反射机制进行调用。那么,在生成Java类文件后,服务平台需要对这个Java类文件的执行过程进行跟踪,若根据执行方式已可以确定Java类文件中某些采用Java反射机制调用的变量类型和/或变量操作方法,则服务平台对这些信息进行记录,并根据重新确定的变量类型和/或变量操作方法对上述Java类文件进行重新编译,例如,服务平台再次接收到相同的网页浏览请求并生成相应的Java类文件的过程中,将上一次采用Java反射机制进行调用并且经过上一次实际执行已确定的变量类型和/或变量操作方法在这一次编译过程中采用Java直接调用方式进行调用。以此类推,可以多次执行Java类文件的重新编译过程。
[0059] 显然,Velocity模板的多次调用过程,是一个不断自我优化的过程,服务平台通过跟踪记录Velocity模板对应的Java类文件的执行过程,可以逐渐确定该Velocity模板内包含的各种变量类型和/或变量操作方法,并且会不断重新编译相应的Java类文件,那么,任意一个Velocity模板经过多次调用和执行后,其包含的各种变量类型和/或变量操作方法均可以逐渐确定,最理想的状态为,Velocity模板中包含的所有变量类型和/或变量操作方法均可以采用Java直接调用方式进行调用,而不再需要Java反射方进行来调用,显然,此时,Velocity模板对应的Java类文件已达到最优,不会再重新编译了。
[0060] 当然,在后续的多次编译过程中,很可能会出现编译错误,此时,为了保证Velocity模板对应的Java类文件能够被正常执行,则忽略最新一次的编译,继续使用上一次编译后生成的Java类文件进行后续操作,在此不再赘述。
[0061] 综上所述,本申请实施例中,重新实现了Velocity语法功能,即重新实现了一个全新的Sketch架构,在此Sketch架构中,可以根据用户发送的网页浏览请求,尽量采用Java直接调用方式将用户请求的Velocity模板转换为相应的Java类文件,这样,将会有效地提升Velocity模板转换时的代码执行效率,提升服务平台的QPS(Query Per Second,每秒的查询数目),减少RT(Response Time,响应时间),从而降低系统GC(Java虚拟机垃圾回收),进而能够提高整个应用系统的性能,解决Velocity模板渲染引起的性能瓶颈。
[0062] 显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用