CN117010358A - 消息卡片生成方法、装置、计算机设备和存储介质 - Google Patents
消息卡片生成方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN117010358A CN117010358A CN202211008687.4A CN202211008687A CN117010358A CN 117010358 A CN117010358 A CN 117010358A CN 202211008687 A CN202211008687 A CN 202211008687A CN 117010358 A CN117010358 A CN 117010358A
- Authority
- CN
- China
- Prior art keywords
- data
- template
- message
- expression
- instruction
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 112
- 230000014509 gene expression Effects 0.000 claims abstract description 241
- 238000009877 rendering Methods 0.000 claims abstract description 59
- 238000004590 computer program Methods 0.000 claims abstract description 26
- 238000004458 analytical method Methods 0.000 claims description 111
- 238000012545 processing Methods 0.000 claims description 74
- 238000004422 calculation algorithm Methods 0.000 claims description 15
- 238000005457 optimization Methods 0.000 claims description 13
- 230000008569 process Effects 0.000 description 62
- 238000004891 communication Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 230000002829 reductive effect Effects 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 5
- 238000007726 management method Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/186—Templates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
- G06F40/154—Tree transformation for tree-structured or markup documents, e.g. XSLT, XSL-FO or stylesheets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种消息卡片生成方法、装置、计算机设备、存储介质和计算机程序产品。所述方法包括:获取包含模板指定信息以及业务数据的消息卡片生成请求;基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板;根据所述消息模板以及所述业务数据,得到消息数据;识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果;基于所述消息数据以及所述运算结果,渲染生成消息卡片。本申请可以有效提高消息卡片的生成效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种消息卡片生成方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着计算机技术与通信技术的发展,出现了基于网络的即时通讯(InstantMessaging,IM)技术,它允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。通常来讲可以把即时通讯过程中,出现在消息会话页面内的内容称做消息卡片,目前消息业务常见的消息卡片有文字、富文本、语音、照片、视频以及通知消息。
目前,一般可以通过具备动态解析渲染能力的跨平台视图控件来对消息卡片进行解析渲染,然而在动态化消息卡片解析过程中,消息卡片过程中表达式运算过程的开销较大,影响消息卡片的通信效率。
发明内容
基于此,有必要针对上述技术问题,提供一种能够有效提高消息卡片通信效率的消息卡片生成方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种消息卡片生成方法。所述方法包括:
获取包含模板指定信息以及业务数据的消息卡片生成请求;
基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板;
根据所述消息模板以及所述业务数据,得到消息数据;
识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果,所述表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,所述抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,所述抽象语法树中结点表征表达式运算法则的操作数或操作符;
基于所述消息数据以及所述运算结果,渲染生成消息卡片。
第二方面,本申请还提供了一种消息卡片生成装置。所述装置包括:
请求获取模块,用于获取包含模板指定信息以及业务数据的消息卡片生成请求;
模板查找模块,用于基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板;
消息解析模块,用于根据所述消息模板以及所述业务数据,得到消息数据;
数据运算模块,用于识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果,所述表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,所述抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,所述抽象语法树中结点表征表达式运算法则的操作数或操作符;
消息卡片生成模块,用于基于所述消息数据以及所述运算结果,渲染生成消息卡片。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取包含模板指定信息以及业务数据的消息卡片生成请求;
基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板;
根据所述消息模板以及所述业务数据,得到消息数据;
识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果,所述表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,所述抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,所述抽象语法树中结点表征表达式运算法则的操作数或操作符;
基于所述消息数据以及所述运算结果,渲染生成消息卡片。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取包含模板指定信息以及业务数据的消息卡片生成请求;
基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板;
根据所述消息模板以及所述业务数据,得到消息数据;
识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果,所述表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,所述抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,所述抽象语法树中结点表征表达式运算法则的操作数或操作符;
基于所述消息数据以及所述运算结果,渲染生成消息卡片。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取包含模板指定信息以及业务数据的消息卡片生成请求;
基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板;
根据所述消息模板以及所述业务数据,得到消息数据;
识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果,所述表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,所述抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,所述抽象语法树中结点表征表达式运算法则的操作数或操作符;
基于所述消息数据以及所述运算结果,渲染生成消息卡片。
上述消息卡片生成方法、装置、计算机设备、存储介质和计算机程序产品,通过在获取包含模板指定信息以及业务数据的消息卡片生成请求后;先基于模板指定信息得到消息卡片生成请求对应的消息模板;根据消息模板以及业务数据,得到消息数据;而后通过识别消息数据中的表达式数据,在表达式指令集中查找表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果,其中表达式指令集中的指令基于遍历历史数据中各类表达式的抽象语法树中结点生成,抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,抽象语法树中结点表征表达式运算法则的操作数或操作符。通过将表达式运算过程中的词法分析以及语法分析的过程抽象为指令数据,从而可以在面对重复的表达式时,直接通过指令数据来实现表达式运算,减少表达式运算过程的开销,最终则可以基于消息数据以及运算结果,渲染生成消息卡片,本申请通过降低消息解析过程中表达式解析过程的开销,保证消息卡片的生成效率,进而提高基于消息卡片进行通信的通信效率。
附图说明
图1为一个实施例中消息卡片生成方法的应用环境图;
图2为一个实施例中消息卡片生成方法的示意图;
图3为一个实施例中的数据运算处理过程的示意图;
图4为一个实施例中本申请的数据运算处理过程的流程示意图;
图5为一个实施例中现有的模板加载处理方法与本申请的模板加载处理方法的对比示意图;
图6为一个实施例中模板加载处理步骤的流程示意图;
图7为一个实施例中模板缓存数据复用处理步骤的流程示意图;
图8为一个实施例中基于表达式生成代码步骤的流程示意图;
图9为一个实施例中字段判空优化处理的示意图;
图10为一个实施例中常量表达式优化处理的示意图;
图11为一个实施例中消息卡片生成装置的结构框图;
图12为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在本文中,需要理解的是,所涉及的术语:
FunView:是一种具备动态解析渲染能力的跨平台视图控件;
XmlNode:是FunView中用于描述用户界面样式的视图节点结构。
本申请实施例提供的消息卡片生成方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他服务器上。当服务器104方的工作人员需要推送消息卡片给到终端102方时,可以向终端102发送包含模板指定信息以及业务数据的消息卡片生成请求,终端102获取包含模板指定信息以及业务数据的消息卡片生成请求;基于模板指定信息得到消息卡片生成请求对应的消息模板;根据消息模板以及业务数据,得到消息数据;识别消息数据中的表达式数据,在表达式指令集中查找表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果,表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,抽象语法树中结点表征表达式运算法则的操作数或操作符;基于消息数据以及运算结果,最后在终端102的显示屏上渲染生成消息卡片。其中,终端102与终端104可以但不限于是各种台式计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种消息卡片生成方法,以该方法应用于图1中的终端102为例进行说明,包括以下步骤:
步骤201,获取包含模板指定信息以及业务数据的消息卡片生成请求。
其中,消息卡片生成请求是指服务器104希望通过消息卡片传达信息而生成的一个请求。消息卡片又称卡片消息,它是一种结构化的消息,可以提供一个易用、统一的富交互形式。在其中一个实施例中,消息卡片具体可以是指FunView消息,FunView是一种具备动态解析渲染能力的跨平台视图控件,目前被广泛应用于各类即时通信软件的消息流中,FunView基于模板和数据进行动态解析渲染,模板是一个样式描述集,以文件链接形式随消息下发,需要的时候动态下载解析,再结合数据运算,得到可渲染视图树,最终绘制到屏幕上。消息卡片生成请求具体包含了模板指定信息以及业务数据,其中模板指定消息用于指定消息卡片生成过程中所用到的消息模板,而业务数据也是用于填充消息模板,得到消息卡片的数据。模板指定信息用于指定生成消息卡片所使用的消息模板,模板指定信息具体可以通过模板名称、模板编号或者模板类型等信息来指定所需要的消息模板。
具体地,当服务器104方的工作人员需要向终端102方的用户发送消息时,可以将消息以消息卡片的方式来进行发送,此时服务器104需要先向终端102提交相应的消息卡片生成请求,以在终端102的显示界面上渲染生成消息卡片。同时,在消息卡片生成请求中添加模板指定消息,来指定消息卡片所用的消息模板,同时添加相应的业务数据,服务器104在接收消息卡片生成请求后,可以先确定生成消息卡片所用的模板,同时从终端102方下载相应的消息数据以生成消息卡片。在其中一个实施例中,本申请的方案适用于一个企业内部通信所用的即时通信软件,消息卡片具体可以是指FunView消息,当企业人员需要向即时通信软件中的个人用户或者群聊发送消息时,可以使用FunView消息卡片的形式来发送数据,此时需要提交消息卡片生成请求至各个终端,同时提交模板指定信息以及业务数据,终端102得到消息数据,并动态下载消息模板,再通过数据解析以及数据运算等操作,得到可渲染视图树,最终绘制到终端的屏幕上。
步骤203,基于模板指定信息得到消息卡片生成请求对应的消息模板。
其中,而消息模板是消息卡片的组成部分之一,通过业务数据与消息模板的加载与解析,可以生成最终所需要的消息卡片。消息模板具体包含有模板名称、模板类型、模板内容等信息。其中模板内容包含有消息卡片的具体样式,包含有消息标题以及消息内容等部分。可以通过将业务数据与消息模板组合来生成最终所需要的消息卡片(包含部分需要表达式计算的内容)。而业务数据则是包含具体消息内容的数据。消息模板可以以二进制数据的形式传输到服务器104上。
具体地,当服务器得到消息卡片生成请求后,可以先解析出其中包含的模板指定信息以及业务数据,并根据模板指定信息来查找并下载到相应的消息模板。同时,还可以基于消息卡片生成请求,从终端102上下载二进制形式的消息数据,而后即可基于消息数据与消息模板来生成所需的消息卡片。在其中一个实施例中,本申请的方案适用于一个企业内部通信所用的即时通信软件,即时通信软件中预设有若干的消息模板,终端可以通过模板名称来指定所需要的消息模板,而服务器在接收到终端的消息卡片生成请求,可以通过其中的模板名称来查找并下载相应的消息模板,同时从终端方可以从消息卡片生成请求得到业务数据以便生成所需的消息卡片。
步骤205,根据消息模板以及业务数据,得到消息数据。
其中,消息数据具体是指消息模板转化为样式描述树后,与业务数据组合得到的数据。
具体地,消息模板具体为二进制形式的数据,需要通过解析处理才能渲染到终端102的屏幕上。而消息模板的解析与渲染过程具体包括了读取二进制、解析为样式描述树、相同数据运算解析、相同样式描述树转换为渲染树等步骤。首先需要从服务器104中下载并读取二进制形式的消息模板,而后将二进制形式的消息模板转化为样式描述树,在这个过程中,业务数据会与消息模板解析得到的样式描述树中间的节点组合起来。模板中属性节点值可能为表达式,而表达式指定了要取业务数据中的字段来进行运算,此时在得到样式描述树后,即可将业务数据的对应字段加入到样式描述树中,以对其中的表达式进行填充。在其中一个实施例中,本申请具体用于实现FunView动态化消息卡片的解析与渲染,此时样式描述树具体为XmlNode样式描述树,而业务数据则是与消息模板所对应的XmlNode样式描述树结合来得到消息数据。
步骤207,识别消息数据中的表达式数据,在表达式指令集中查找表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果,表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,抽象语法树中结点表征表达式运算法则的操作数或操作符。
其中,表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。指令数据中包含多个指令,指令(instruction)用于告诉计算机从事某一特殊运算的代码。如:数据传送指令、算术运算指令、位运算指令、程序流程控制指令、串操作指令、处理器控制指令等,指令用于缓存表达式运算过程中词法分析、语法分析的运算结果。具体地,可以根据表达式的词法分析、语法分析的运算结果生成相应的抽象语法树,根据通过遍历抽象语法树中结点生成来生成各个指令。而表达式指令集是指基于先前解析出来的表达式数据所构建的一个指令集合。抽象语法树中结点表征表达式运算法则的操作数或操作符。抽象语法树的结点具体包括叶子结点和非叶子结点两种,叶子结点表示一个运算法则中的操作数,非叶子结点表示一个运算法则中的操作符。
具体地,消息卡片丰富且动态的样式表现,是由表达式与业务数据共同声明的。在实际的消息卡片业务场景中,通常有大量相似或重复的表达式需要运算,这些表达式均需逐个进行词法分析、语法分析、数值运算等重复的流程,其在消息卡片解析流程中占据较大部分的开销。目前,会直接将表达式词法分析的结果进行缓存,在遇到重复的表达式时,能够节省重复进行词法分析的开销。具体的方法是,将表达式的哈希值作为键,将词法分析结果的数据结构作为值,在词法分析流程中,以该键值对缓存进行更新与取用,具体可以参照图3所示,然而该方法仅能节省词法分析流程的开销,而词法分析中多为顺序遍历、鲜有回溯场景,相较于语法分析,其仅占总开销的10%左右,开销远不及语法分析流程。该方法带来的性能表现较差,因此,本申请通过提出一种中间指令层的思路,从而来有效缓存词法分析、语法分析的结果,在面临重复的表达式时,能够较大程度节省重复开销。整体的流程,变更为:词法分析、语法分析、指令生成、指令运算共4个步骤,具体如图4所示。首先,在得到重复的表达式之后,可以直接从构建的指令数据中提取出表达式数据对应的指令数据,而后根据指令数据进行数据运算,得到表达式数据的运算结果,通过缓存词法分析以及语法分析的结果为指令,可以直接通过指令来实现表达式的快速运算,从而提高消息卡片生成效率,进而提高基于消息卡片进行通信的通信效率。
步骤209,基于消息数据以及运算结果,渲染生成消息卡片。
具体地,在得到运算结果后,可以将运算结果对应的样式描述树以及非表达式部分消息数据的样式描述树转化为渲染树,而后对得到的渲染树进行渲染上屏的处理,从而在终端104方生成相应的消息卡片,完成消息卡片的生成流程。在其中一个实施例中,本申请的方案适用于一个企业内部通信所用的即时通信软件,此时消息卡片可以推送给企业内部的个人或群聊,当推送给个人时,会在个人对应的终端上显示息卡片。而当推送至群聊时,则会推送给群聊中的所有成员,在各个群聊成员的终端上显示该消息卡片。
上述消息卡片生成方法,通过在获取包含模板指定信息以及业务数据的消息卡片生成请求后;先基于模板指定信息得到消息卡片生成请求对应的消息模板;根据消息模板以及业务数据,得到消息数据;而后通过识别消息数据中的表达式数据,在表达式指令集中查找表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果,其中表达式指令集中的指令基于遍历历史数据中各类表达式的抽象语法树中结点生成,抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,抽象语法树中结点表征表达式运算法则的操作数或操作符。通过将表达式运算过程中的词法分析以及语法分析的过程抽象为指令数据,从而可以在面对重复的表达式时,直接通过指令数据来实现表达式运算,减少表达式运算过程的开销,最终则可以基于消息数据以及运算结果,渲染生成消息卡片,本申请通过降低消息解析过程中表达式解析过程的开销,保证消息卡片的生成效率,进而提高基于消息卡片进行通信的通信效率。
在一个实施例中,步骤203包括:当在任务队列中未查找到模板指定信息对应的模板加载任务时,根据创建模板指定信息对应的模板加载任务,并在创建的模板加载任务中注册侦听任务,侦听任务用于侦听模板指定信息所指定的消息模板的下载完成情况;基于模板加载任务得到消息卡片生成请求对应的消息模板。
其中,任务队列是指发送消息所用的队列,每个队列中都用于实现一个消息卡片生成的任务。模板加载任务则是指从模板库中下载消息卡片生成请求对应的消息模板的任务,由于生成消息卡片需要模板数据以及业务数据,在需要生成消息卡片需要从模板库中加载相应的模板来构建消息卡片。而侦听任务则是用于侦听消息模板下载是否完成的任务,通过侦听任务可以侦听消息模板的下载过程,只要下载完成即可直接得到相应的消息模板来执行后续消息卡片生成的过程。
具体地,目前的消息模板使用方法,当需要使用相同模板的多个消息同时加载时,每个消息会独立的进行模板文件下载读取操作,存在一个模板,多次读取的情况,造成不必要的浪费。因此,如图5所示,本申请通过增加模板管理器来实现对模板加载过程的管理,当发生模板加载动作时,会通过模板管理器来生成需要加载的模板对应的一个模板加载任务。而在需要加载新模板时,也会在加载之前,先在任务队列中查找下目前是否存在该新模板对应的模板加载任务。如果不存在时,说明需要通过新的模板加载任务来取出模板,此时可以根据消息模板创建模板加载任务,并根据模板指定信息在创建的模板加载任务中注册侦听任务,从而侦听模板指定信息所对应消息模板的下载流程,而后即可通过模板加载任务得到对应的消息模板。而在此过程中,其他模板加载任务也可以通过侦听模板加载任务来确定消息模板的加载流程,从而通过一次模板加载任务就可以实现多个消息卡片创建过程的模板读取任务。在其中一个实施例中,本申请的方案适用于一个企业内部通信所用的即时通信软件,此时可以根据企业需要建立消息模板库,以模板名称为键值将不同的消息模板存储到消息模板库,当需要创建消息卡片时,可以通过模板名称来在消息模板库中查找并下载相应的消息模板,同时在模板加载的过程中,如果有其他的消息卡片生成任务需要读取该消息模板,可以直接添加侦听来侦听该消息模板加载的过程,当消息模板加载完成后,这些消息卡片的生成任务可以直接得到这些该消息模板,以进行后续的解析与渲染处理。本实施例中,通过模板管理器与任务队列来实现对模板加载过程的侦听与管理,可以在减少相同消息模板的读取次数,从而提高基于消息模板来生成消息卡片过程的处理效率。
在一个实施例中,步骤203还包括:当在任务队列中查找到模板指定信息对应的模板加载任务时,在模板指定信息对应的模板加载任务中注册侦听任务,侦听任务用于侦听模板指定信息所指定的消息模板的下载完成情况;当基于侦听任务侦听到消息模板下载完成时,得到消息卡片生成请求对应的消息模板。
具体地,如图6所示,在需要加载新模板时,服务器104会在创建模板加载任务之前,先基于模板指定信息在任务队列中查找下目前是否存在该新模板对应的模板加载任务。如果存在,可以直接通过注册侦听任务来侦听模板加载任务中消息模板的下载流程,从而通过一次模板加载任务就可以实现多个消息卡片创建过程的模板读取任务。即只生成一个消息模板任务,其他消息卡片需要加载相同的消息模板时,需要侦听这个任务是否完成即可,若任务完成后,告知所有侦听者文件加载完成,可以进行下一步操作。而不存在时,则需要通过先创建模板加载任务来实现模板加载处理。本实施例中,通过模板管理器与任务队列来实现对模板加载过程的侦听与管理,可以在减少相同消息模板的读取次数,从而提高基于消息模板来生成消息卡片过程的处理效率。
在其中一个实施例中,步骤205包括:解析消息模板,得到样式描述树;根据样式描述树以及业务数据,得到消息数据。
其中,解析消息模板是指将消息模板解析为样式描述树。而表达式数据是指消息数据中的部分数据,服务器在得到消息模板后,可以将二进制形式的消息模板转化为对应的数据结构,然后解析为样式描述树,样式描述树包含了多节点之间的层级结构、单节点的属性描述等,然而这时候的描述树,其中的某些属性可能为表达式,不能直接进行渲染,需要将数据应用到表达式上,计算出具体的值,并赋值给节点属性,这之后得到的渲染树,才可以进行渲染上屏。因此,在得到样式描述树后,可以将样式描述树与业务数据相结合,来对相关表达式进行填充,得到消息数据。
具体地,在得到业务数据以及消息模板之后,需要通过解析消息模板,将消息模板转化为样式描述树、数据运算、样式描述树转换为渲染树、渲染上屏等几个步骤。而数据运算过程具体是指对表达式对应的样式描述树进行数据运算处理,从而计算出具体的值,并赋值给节点属性,以便进行后续的渲染处理。因此,服务器可以在得到消息模板后,可以先解析消息模板而后将其与业务数据组合,来得到包含表达式数据的消息数据,以便为后续的运算处理做铺垫。
在其中一个实施例中,步骤209之后,还包括:获取包含模板标识的模板复用请求;基于模板标识查找缓存文件,缓存文件包括视图缓存、节点缓存或文件缓存中的至少一种;当查找到模板标识对应的视图缓存时,通过数据运算处理得到模板复用请求对应的渲染树;当查找到模板标识对应的节点缓存时,通过节点解析处理与数据运算处理得到模板复用请求对应的渲染树;当查找到模板标识对应的文件缓存时,通过模板全量解析处理得到模板复用请求对应的渲染树;当未查找模板标识对应的视图缓存、节点缓存和文件缓存时,通过模板加载处理以及模板全量解析处理得到模板复用请求对应的渲染树;基于渲染树渲染生成模板复用请求对应的消息卡片。
其中,模板标识是指用于从消息模板库识别出所需目标消息模板的标识信息。模板标识具体可以包括模板类型、模板编号以及模板名称等。模板缓存文件则是指消息模板的缓存文件,同一模板,其加载解析会根据阶段不同,会产生三个产物:文件、样式描述树、渲染视图树。而不同阶段的缓存数据也不同,可以通过识别消息模板的缓存文件,来减少针对消息模板不必要的解析过程。提高消息卡片的生成效率。消息模板具体为一种视图文件,因此模板解析的过程也是一种视图解析的过程,消息模板的解析完整过程同样包含了加载消息模板文件、节点解析转化为样式描述树、数据运算等流程。视图缓存文件中包含有由样式描述树转化来的视图树,即消息模板节点解析后生成的即为视图缓存文件,因此当缓存文件中存在视图缓存时,说明当前的消息模板已经通过了模板加载处理以及节点解析处理,已将模板中的视图树转化为了视图树,因此只需要在视图树的基础上进行数据运算处理即可得到解析完全的消息模板文件,通过数据运算可以将视图树中的表达式计算出具体数据后赋予属性以进行渲染。节点缓存即样式描述树文件所对应的缓存数据,当读取消息模板后,可以将其转化为样式描述树,得到的即为节点缓存文件。节点缓存文件需要通过节点解析处理来转化为视图树,而后再通过数据运算处理,才能得到渲染树,因此在得到节点缓存,还需要通过节点解析和数据运算两步处理再进行解析。文件缓存则指的是模板文件的缓存,模板全量解析处理包含节点解析转化为样式描述树、数据运算等所有解析过程。如果缓存中存在文件缓存而不存在视图缓存与节点缓存,则说明需要通过模板全量解析处理来完成一次全量的解析处理。而如果不存在文件缓存,则说明还要先去读取到消息模板再来进行模板全量解析处理,才可以得到渲染用的渲染树。
具体地,本申请还可以通过模板缓存文件来实现对消息模板的复用,可以先通过消息模板的模板标识,而后以模板标识为键值来实现消息模板相关缓存数据或者消息模板本体的查找。由于模板过程中产生三个不同的产物,即文件、样式描述树、渲染视图树这三种产物,而不同产物对应的模板缓存文件,因此可以通过设置多级缓存机制,来查找模板相应的缓存文件,而后基于查找到的缓存文件进行不同的模板加载处理,减少针对消息模板的解析过程,从而确保处理效率。在其中一个实施例中,如图7所示,在查找到最终解析得到的视图缓存文件时,只需要通过数据运算处理得到模板复用请求对应的渲染树。而只查找到节点缓存的XmlNode缓存文件时,则需要先通过XmlNode解析来将XmlNode缓存文件先转化为视图树,再通过数据运算处理来得到渲染时。而只查找到模板标识对应的文件缓存时,说明需要通过对消息模板文件执行包含样式描述树转化、节点解析以及数据运算的模板全量解析处理才能得到模板复用请求对应的渲染树,而若是连文件缓存都没查找到,则还需要先去加载对应的消息模板文件再来进行模板全量解析。本实施例中,通过模板标识查找模板缓存文件,从而可以通过模板缓存文件来进行消息模板的加载解析,减少消息模板的解析流程,提高消息卡片的生成效率。
在其中一个实施例中,步骤207之前,还包括:获取历史数据中的表达式数据;对历史数据中的表达式数据进行词法分析处理,得到单词流数据;对单词流数据进行语法分析处理,构建抽象语法树;遍历抽象语法树中的各个结点,根据遍历结果生成指令数据中的各个指令。
其中,词法分析是指是计算机科学中将字符序列转换为单词(Token)流的过程。进行词法分析的程序或者函数叫作词法分析器,也叫扫描器。词法分析器一般以函数的形式存在,供语法分析器调用。完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器。完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器。从左至右地对源程序进行扫描,按照语言的词法规则识别各类单词,并产生相应单词的属性字。而语法分析则是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等。语法分析程序判断源程序在结构上是否正确。源程序的结构由上下文无关文法描述。语法分析程序同样可以用工具来自动生成。完成语法分析任务的程序称为语法分析器,或语法分析程序。按照源语言的语法规则,从词法分析的结果中识别出相应的语法范畴,同时进行语法检查。抽象语法树(AbstractSyntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个结点都表示源代码中的一种结构。由于本申请的方案主要用于对表达式数据进行处理。因此,结点表征表达式运算法则的操作数或操作符。通过遍历抽象语法树中的各个结点,根据遍历结果生成指令数据中的各个指令。
具体地,本申请的方案通过指令数据来对词法分析以及语法分析的过程进行分析缓存,来得到各个指令数据,而指令具体可以通过语法分析来生成。首先,需要通过Lex等词法分析器对历史数据中的各个表达式进行词法分析,得到表达式所对应的单词流数据,而后通过Yacc等语法分析器来对单词流数据进行语法分析,从而构建出对应的抽象语法树,在得到语法分析树后,再通过遍历结点即可得到各个结点所对应的指令。在其中一个实施例中,基于历史数据中的表达式“a=b+c*d”来构建指令数据中的各个指令的过程可以参照图8所示,首先通过词法解析工具Lex对表达式进行词法分析,得到单词流数据为“id1=id2+id3-id4”,再通过语法分析工具Yace来对单词流进行语法分析,得到抽象语法树如图所示,而后遍历抽象语法树中的节点,查找到的指令包含有“load id3”、“mul id4”、“addid2”以及“store id1”4个指令。本实施例中,通过对表达式的语法分析可以构建出各种指令,而在后续数据运算处理时,即可直接通过指令数据来进行运算,从而提高消息卡片的生成效率。
在其中一个实施例中,根据指令数据得到表达式数据的运算结果包括:对指令数据进行字段判空处理,识别指令数据中的待优化数据;基于待优化数据对指令数据进行优化处理,得到优化指令;根据优化指令得到表达式数据的运算结果。
其中,对指令进行优化处理具体是指对指令数据中部分判空指令进行优化,例如针对常见的数组判空(数组容量)、字符串判空(字符串长度)语法都可以进行优化,从而将多条指令替换为单条指令。
具体地,所查找到的指令中可能包含有部分空指令,为了减少指令执行的消耗,可以先对这些空指令进行优化处理。此时,可以通过判空指令(CHECK_EMPTY)来识别指令数据中各个指令是否为空指令,通过判空指令来专门执行判空操作,可以对指令数据中的数组、字符串进行判空,替代之前的LOAD、CALL、EQAL三条指令。从而减少指令数量,提高数据运算过程的处理效率。在其中一个实施例中,如图9左侧所示,先从指令数据的代码中识别出待优化数据,此处包含有“desc_list.size()”以及“num 0”两个。因此针对图9右侧,中的其中的前三句指令进行优化,将找到的判空操作对应的指令,替换成CHECK_EMPTY指令。本实施例中,通过指令数据的判空处理,可以有效地减少指令数量,从而提高数据运算处理过程的处理效率。
在其中一个实施例中,根据指令数据得到表达式数据的运算结果包括:识别指令数据中的最高频数据字段;构建最高频数据字段对应的快速访问指令;基于快速访问指令更新指令数据;通过更新后的指令数据得到表达式数据的运算结果。
其中,最高频数据字段是指包含所有指令的指令数据中,出现频次最高的一个数据字段。这种出现频次较高的数据字段一般需要通过逐级访问嵌套字段的策略来进行访问。而快速访问指令则是可以一次性访问嵌套字段的策略,可以防止数据在临时寄存器中被反复流转。
具体地,本申请的方案还可以通过字段访问优化措施来对数据运算处理的过程进行精简,通过识别指令数据中的最高频数据字段;构建最高频数据字段对应的快速访问指令;基于快速访问指令更新指令数据;通过更新后的指令数据得到表达式数据的运算结果针对最高频的数据字段直接访问语法,将逐级访问嵌套字段的策略替换成一次性访问嵌套字段的策略,避免数据在临时寄存器中被反复流转。针对最高频数据字段,可以将其转化为一次性访问嵌套字段,从而实现对指令数据的优化。本实施例中,通过字段访问优化可以有效地精简数据运算的流程,从而提高数据运算的处理效率。
在其中一个实施例中,根据指令数据得到表达式数据的运算结果包括:识别表达式数据中的常量表达式节点,常量表达式为操作数均为常量的语法节点;对常量表达式节点进行数据运算处理,得到常量运算结果;将表达式数据中的常量表达式节点替换为常量表达式节点所对应的常量运算结果,以更新表达式数据;在表达式指令集中查找更新后的表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果。
其中,常量表达式为操作数均为常量的语法节点,这种语法节点可以直接运算得出结果,来替换掉原有节点。
具体地,本申请还可以对表达式数据中的常量表达式来进行优化,如果识别出表达式的一个节点内所有的操作数均为常量,如图10所示,其中(2+1)这个节点内的操作数均为常量,因此可以先对其进行运算,得到常量运算结果为3,而后使用3来替代原来的(2+1),来更新表达式,而后即可根据更新好的表达式来获取指令数据,从而可直接避免生成指令,提高数据运算过程的处理效率。本实施例中,通过常量表达式优化来对表达式数据进行进一步地优化,可以有效提高处理效率。
本申请还提供一种应用场景,该应用场景应用上述的消息卡片生成方法。具体地,该消息卡片生成方法在该应用场景的应用如下:
本申请具体可以应用于一款适用于企业管理的即时通讯软件中,管理员可以在服务器端向即时通讯软件中企业的各个成员,或者包含若干个企业成员的群聊推送消息,而推送消息的形式具体可以通过FunView消息卡片的形式来实现。服务器端的管理员首先在服务器端提交用于生成消息卡片的业务数据,同时设置需要使用的消息模板的模板指定信息。而后推送包含模板指定信息以及业务数据的消息卡片生成请求至各个成员对应的终端,以在终端方渲染生成相应的消息卡片。而终端在得到包含模板指定信息以及业务数据的消息卡片生成请求。首先,需要基于模板指定信息得到消息卡片生成请求对应的消息模板,这个过程可以通过模板加载任务来向服务器下载消息模板实现,而可能存在同时有多个消息加载相同消息模板的情况。此时,针对消息模板的加载过程,可以先基于模板指定消息,在加载消息模板的任务队列中查找模板指定信息对应的模板加载任务,当在任务队列中未查找到模板指定信息对应的模板加载任务时,根据创建模板指定信息对应的模板加载任务,并在创建的模板加载任务中注册侦听任务,侦听任务用于侦听模板指定信息所指定的消息模板的下载完成情况;基于模板加载任务得到消息卡片生成请求对应的消息模板。而当在任务队列中查找到模板指定信息对应的模板加载任务时,在模板指定信息对应的模板加载任务中注册侦听任务,侦听任务用于侦听模板指定信息所指定的消息模板的下载完成情况;当基于侦听任务侦听到消息模板下载完成时,得到消息卡片生成请求对应的消息模板。在得到消息模板后,可以解析消息模板,得到XmlNode样式描述树;根据XmlNode样式描述树以及业务数据,得到消息数据。而后则可以识别消息数据中的表达式数据,在表达式指令集中查找表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果,表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,抽象语法树中结点表征表达式运算法则的操作数或操作符。具体地,对于表达式指令集的构建过程,可以通过获取历史数据中的表达式数据;对历史数据中的表达式数据进行词法分析处理,得到单词流数据;对单词流数据进行语法分析处理,构建抽象语法树;遍历抽象语法树中的各个结点,根据遍历结果生成指令数据中的各个指令。对于表达式的计算过程,还可以包含三个优化处理的过程,第一为字段判空优化,通过对指令数据进行字段判空处理,识别指令数据中的待优化数据;基于待优化数据对指令数据进行优化处理,得到优化指令;根据优化指令得到表达式数据的运算结果。第二为字段访问优化,通过识别指令数据中的最高频数据字段;构建最高频数据字段对应的快速访问指令;基于快速访问指令更新指令数据;通过更新后的指令数据得到表达式数据的运算结果。第三为常量表达式优化,通过识别表达式数据中的常量表达式节点,常量表达式为操作数均为常量的语法节点;对常量表达式节点进行数据运算处理,得到常量运算结果;将表达式数据中的常量表达式节点替换为常量表达式节点所对应的常量运算结果,以更新表达式数据;在表达式指令集中查找更新后的表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果。此外,本申请还包含有通过缓存机制来实现模板缓存数据复用的流程,具体地,终端可以在接收到包含模板标识的模板复用请求后开始模板复用的处理;首先基于模板标识查找缓存文件,缓存文件包括视图缓存、节点缓存或文件缓存中的至少一种;当查找到模板标识对应的视图缓存时,通过数据运算处理得到模板复用请求对应的渲染树;当查找到模板标识对应的节点缓存时,通过节点解析处理与数据运算处理得到模板复用请求对应的渲染树;当查找到模板标识对应的文件缓存时,通过模板全量解析处理得到模板复用请求对应的渲染树;当未查找模板标识对应的视图缓存、节点缓存和文件缓存时,通过模板加载处理以及模板全量解析处理得到模板复用请求对应的渲染树;基于渲染树渲染生成模板复用请求对应的消息卡片。从而有效地提高消息卡片生成过程的处理效率。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的消息卡片生成方法的消息卡片生成装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个消息卡片生成装置实施例中的具体限定可以参见上文中对于消息卡片生成方法的限定,在此不再赘述。
在一个实施例中,如图11所示,提供了一种消息卡片生成装置,包括
请求获取模块1102,用于获取包含模板指定信息以及业务数据的消息卡片生成请求;
模板查找模块1104,用于基于模板指定信息得到消息卡片生成请求对应的消息模板;
消息解析模块1106,用于根据消息模板以及业务数据,得到消息数据;
数据运算模块1108,用于识别消息数据中的表达式数据,在表达式指令集中查找表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果,表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,抽象语法树中结点表征表达式运算法则的操作数或操作符;
消息卡片生成模块1110,用于基于消息数据以及运算结果,渲染生成消息卡片。
在其中一个实施例中,模板查找模块1104具体用于:当在任务队列中未查找到模板指定信息对应的模板加载任务时,根据创建模板指定信息对应的模板加载任务,并在创建的模板加载任务中注册侦听任务,侦听任务用于侦听模板指定信息所指定的消息模板的下载完成情况;基于模板加载任务得到消息卡片生成请求对应的消息模板。
在其中一个实施例中,模板查找模块1104具体用于:当在任务队列中查找到模板指定信息对应的模板加载任务时,在模板指定信息对应的模板加载任务中注册侦听任务,侦听任务用于侦听模板指定信息所指定的消息模板的下载完成情况;当基于侦听任务侦听到消息模板下载完成时,得到消息卡片生成请求对应的消息模板。
在其中一个实施例中,消息解析模块1106具体用于:解析消息模板,得到样式描述树;根据样式描述树以及业务数据,得到消息数据。
在其中一个实施例中,还包括模板复用模块,用于:获取包含模板标识的模板复用请求;基于模板标识查找缓存文件,缓存文件包括视图缓存、节点缓存或文件缓存中的至少一种;当查找到模板标识对应的视图缓存时,通过数据运算处理得到模板复用请求对应的渲染树;当查找到模板标识对应的节点缓存时,通过节点解析处理与数据运算处理得到模板复用请求对应的渲染树;当查找到模板标识对应的文件缓存时,通过模板全量解析处理得到模板复用请求对应的渲染树;当未查找模板标识对应的视图缓存、节点缓存和文件缓存时,通过模板加载处理以及模板全量解析处理得到模板复用请求对应的渲染树;基于渲染树渲染生成模板复用请求对应的消息卡片。
在其中一个实施例中,还包括指令构建模块,用于:获取历史数据;对历史数据进行词法分析处理,得到单词流数据;对单词流数据进行语法分析处理,构建抽象语法树;遍历抽象语法树中的各个结点,根据遍历结果生成指令数据中的各个指令。
在其中一个实施例中,数据运算模块1108具体用于:对指令数据进行字段判空处理,识别指令数据中的待优化数据;基于待优化数据对指令数据进行优化处理,得到优化指令;根据优化指令得到表达式数据的运算结果。
在其中一个实施例中,数据运算模块1108具体用于:识别指令数据中的最高频数据字段;构建最高频数据字段对应的快速访问指令;基于快速访问指令更新指令数据;通过更新后的指令数据得到表达式数据的运算结果。
在其中一个实施例中,数据运算模块1108具体用于:识别表达式数据中的常量表达式节点,常量表达式为操作数均为常量的语法节点;对常量表达式节点进行数据运算处理,得到常量运算结果;将表达式数据中的常量表达式节点替换为常量表达式节点所对应的常量运算结果,以更新表达式数据;在表达式指令集中查找更新后的表达式数据对应的指令数据,根据指令数据得到表达式数据的运算结果。
上述消息卡片生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图12所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种消息卡片生成方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置,显示屏可以是液晶显示屏或电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (13)
1.一种消息卡片生成方法,其特征在于,所述方法包括:
获取包含模板指定信息以及业务数据的消息卡片生成请求;
基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板;
根据所述消息模板以及所述业务数据,得到消息数据;
识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果,所述表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,所述抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,所述抽象语法树中结点表征表达式运算法则的操作数或操作符;
基于所述消息数据以及所述运算结果,渲染生成消息卡片。
2.根据权利要求1所述的方法,其特征在于,所述基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板包括:
当在任务队列中未查找到所述模板指定信息对应的模板加载任务时,根据所述创建所述模板指定信息对应的模板加载任务,并在创建的模板加载任务中注册侦听任务,所述侦听任务用于侦听所述模板指定信息所指定的消息模板的下载完成情况;
基于所述模板加载任务得到所述消息卡片生成请求对应的消息模板。
3.根据权利要求1所述的方法,其特征在于,所述基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板包括:
当在任务队列中查找到所述模板指定信息对应的模板加载任务时,在所述模板指定信息对应的模板加载任务中注册侦听任务,所述侦听任务用于侦听所述模板指定信息所指定的消息模板的下载完成情况;
当基于所述侦听任务侦听到消息模板下载完成时,得到所述消息卡片生成请求对应的消息模板。
4.根据权利要求1所述的方法,其特征在于,所述根据所述消息模板以及所述业务数据,得到消息数据包括:
解析所述消息模板,得到样式描述树;
根据所述样式描述树以及所述业务数据,得到消息数据。
5.根据权利要求1所述的方法,其特征在于,所述基于所述消息数据以及所述运算结果,渲染生成消息卡片之后,还包括:
获取包含模板标识的模板复用请求;
基于所述模板标识查找缓存文件,所述缓存文件包括视图缓存、节点缓存或文件缓存中的至少一种;
当查找到所述模板标识对应的视图缓存时,通过数据运算处理得到所述模板复用请求对应的渲染树;
当查找到所述模板标识对应的节点缓存时,通过节点解析处理与数据运算处理得到所述模板复用请求对应的渲染树;
当查找到所述模板标识对应的文件缓存时,通过模板全量解析处理得到所述模板复用请求对应的渲染树;
当未查找所述模板标识对应的视图缓存、节点缓存和文件缓存时,通过模板加载处理以及模板全量解析处理得到所述模板复用请求对应的渲染树;
基于所述渲染树渲染生成所述模板复用请求对应的消息卡片。
6.根据权利要求1所述的方法,其特征在于,所述在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果之前,还包括:
获取历史数据中的表达式数据;
对所述历史数据中的表达式数据进行词法分析处理,得到单词流数据;
对所述单词流数据进行语法分析处理,构建抽象语法树;
遍历所述抽象语法树中的各个结点,根据遍历结果生成指令数据中的各个指令。
7.根据权利要求1所述的方法,其特征在于,所述根据所述指令数据得到所述表达式数据的运算结果包括:
对所述指令数据进行字段判空处理,识别所述指令数据中的待优化数据;
基于所述待优化数据对所述指令数据进行优化处理,得到优化指令;
根据所述优化指令得到所述表达式数据的运算结果。
8.根据权利要求1至7中任意一项所述的方法,其特征在于,所述根据所述指令数据得到所述表达式数据的运算结果包括:
识别所述指令数据中的最高频数据字段;
构建所述最高频数据字段对应的快速访问指令;
基于所述快速访问指令更新所述指令数据;
通过更新后的指令数据得到所述表达式数据的运算结果。
9.根据权利要求1至7中任意一项所述的方法,其特征在于,所述识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果包括:
识别所述表达式数据中的常量表达式节点,所述常量表达式为操作数均为常量的语法节点;
对所述常量表达式节点进行数据运算处理,得到常量运算结果;
将所述表达式数据中的常量表达式节点替换为常量表达式节点所对应的所述常量运算结果,以更新所述表达式数据;
在表达式指令集中查找更新后的所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果。
10.一种消息卡片生成装置,其特征在于,所述装置包括:
请求获取模块,用于获取包含模板指定信息以及业务数据的消息卡片生成请求;
模板查找模块,用于基于所述模板指定信息得到所述消息卡片生成请求对应的消息模板;
消息解析模块,用于根据所述消息模板以及所述业务数据,得到消息数据;
数据运算模块,用于识别所述消息数据中的表达式数据,在表达式指令集中查找所述表达式数据对应的指令数据,根据所述指令数据得到所述表达式数据的运算结果,所述表达式指令集中的指令数据基于遍历历史数据中各类表达式的抽象语法树中结点生成,所述抽象语法树通过对历史数据中各类表达式进行词法分析以及语法分析构建,所述抽象语法树中结点表征表达式运算法则的操作数或操作符;
消息卡片生成模块,用于基于所述消息数据以及所述运算结果,渲染生成消息卡片。
11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述的方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
13.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211008687.4A CN117010358A (zh) | 2022-08-22 | 2022-08-22 | 消息卡片生成方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211008687.4A CN117010358A (zh) | 2022-08-22 | 2022-08-22 | 消息卡片生成方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117010358A true CN117010358A (zh) | 2023-11-07 |
Family
ID=88575037
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211008687.4A Pending CN117010358A (zh) | 2022-08-22 | 2022-08-22 | 消息卡片生成方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117010358A (zh) |
-
2022
- 2022-08-22 CN CN202211008687.4A patent/CN117010358A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110291517B (zh) | 图数据库中的查询语言互操作性 | |
WO2021217846A1 (zh) | 接口数据处理方法、装置、计算机设备和存储介质 | |
CN106648569B (zh) | 目标序列化实现方法和装置 | |
CN111177113B (zh) | 数据迁移方法、装置、计算机设备和存储介质 | |
CN110764760B (zh) | 用于绘制程序流程图的方法、装置、计算机系统和介质 | |
CN109710220B (zh) | 关系型数据库查询方法、装置、设备及存储介质 | |
CN110647316A (zh) | 通用业务对象的生成方法、装置、计算机设备及存储介质 | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
CN113760839A (zh) | 日志数据压缩处理方法、装置、电子设备和存储介质 | |
CN115237805A (zh) | 测试案例数据准备方法及装置 | |
US20200348949A1 (en) | System and methods for loading objects from hash chains | |
CN112970011A (zh) | 记录查询优化中的谱系 | |
CN116450723A (zh) | 数据提取方法、装置、计算机设备及存储介质 | |
CN115809304A (zh) | 字段级血缘解析方法、装置、计算机设备、存储介质 | |
CN117010358A (zh) | 消息卡片生成方法、装置、计算机设备和存储介质 | |
CN115114297A (zh) | 数据轻量存储及查找方法、装置、电子设备及存储介质 | |
CN115080616A (zh) | 字典数据获取方法、装置、存储介质及电子设备 | |
CN114186958A (zh) | 将列表数据导出为电子表格的方法、计算设备及存储介质 | |
US11256679B2 (en) | Systems and methods for storing object state on hash chains | |
CN113254455A (zh) | 数据库的动态配置方法、装置、计算机设备及存储介质 | |
CN112347794A (zh) | 数据翻译方法、装置、设备及计算机存储介质 | |
CN112988778A (zh) | 一种处理数据库查询脚本的方法和装置 | |
CN110908993A (zh) | 分析数据库索引合理性的方法和装置 | |
CN117891531B (zh) | 用于saas软件的系统参数配置方法、系统、介质及电子设备 | |
CN107169098A (zh) | 数据搬运方法、数据搬运装置及电子设备 |
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 |