一种小程序的压力测试方法、装置以及设备与流程
1.本说明书涉及互联网技术领域,尤其涉及基于一种小程序的压力测试方法、装置以及设备。
背景技术:
2.随着小程序的发展,越来越多的用户需要将自己开发的小程序发布至应用中。在这个过程中,由于很多用户因为技术能力或者基础设施的不足,其所开发的小程序没有经过压力测试就上线。这样对于消费者而言,往往就体现为应用中的部分小程序稳定性太差,在高并发时会出现各种问题。
3.基于此,需要一种便捷的小程序的压力测试方案。
技术实现要素:
4.本说明书实施例提供一种小程序的压力测试方法、装置、设备以及存储介质,用以解决如下技术问题:需要一种便捷的小程序的压力测试方案。
5.为解决上述技术问题,本说明书一个或多个实施例是这样实现的:
6.在第一方面,本说明书实施例提供一种小程序的压力测试方法,包括:接收客户端所发送的压力测试请求,确定所述压力测试请求所对应的实例数量n,n为大于1的自然数;获取所述压力测试请求所对应的小程序资源和对应的静态服务;创建虚拟化容器,在所述虚拟化容器中渲染所述小程序资源;在所述虚拟化容器中根据所述静态服务开启n个实例访问已渲染的小程序;获取访问过程中所产生的访问数据,将所述访问数据发送至所述客户端。
7.在第二方面,本说明书实施例提供一种小程序的压力测试装置,包括:接收模块,接收客户端所发送的压力测试请求,确定所述压力测试请求所对应的实例数量n,n为大于1的自然数;获取模块,获取所述压力测试请求所对应的小程序资源和对应的静态服务;虚拟模块,创建虚拟化容器,在所述虚拟化容器中渲染所述小程序资源;访问模块,在所述虚拟化容器中根据所述静态服务开启n个实例访问已渲染的小程序;发送模块,获取访问过程中所产生的访问数据,将所述访问数据发送至所述客户端。
8.在第三方面,本说明书实施例提供一种电子设备,包括:
9.至少一个处理器;以及,
10.与所述至少一个处理器通信连接的存储器;其中,
11.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:执行如第一方面所述的方法。
12.在第四方面,本说明书实施例提供一种非易失性计算机存储介质存储有计算机可执行指令,当计算机读取存储介质中的计算机可执行指令后,该指令使得一个或多个处理器执行如第一方面所述的方法。
13.本说明书一个或多个实施例采用的上述至少一个技术方案能够达到以下有益效
果:通过接收客户端所发送的压力测试请求,确定所述压力测试请求所对应的实例数量n,n为大于1的自然数;获取所述压力测试请求所对应的小程序资源和对应的静态服务;创建虚拟化容器,在所述虚拟化容器中渲染所述小程序资源;在所述虚拟化容器中根据所述静态服务开启n个实例访问已渲染的小程序;获取访问过程中所产生的访问数据,将所述访问数据发送至所述客户端。从而实现模拟并发访问小程序的方式,还原消费者从打开小程序到页面渲染成功的全链路过程,开发者无需额外配置设备,即可以随时按实际需要进行压力测试,更为便捷。
附图说明
14.为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
15.图1为本说明书实施例所提供的一种小程序的压力测试装置的系统的架构示意图;
16.图2为本说明书实施例提供的一种小程序的压力测试方法的流程示意图;
17.图3为本说明书实施例所提供的一种系统中进行测试的逻辑框架示意图;
18.图4为本说明书实施例提供的一种小程序的压力测试装置的结构示意图;
19.图5为本说明书实施例提供的一种电子设备的结构示意图。
具体实施方式
20.本说明书实施例提供一种小程序的压力测试方法、装置、设备以及存储介质。
21.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本说明书实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
22.传统的小程序压力测试中,对于小程序的开发者二者,流程太长且成本过高,而且压测过程无法随意修改配置;无实时可观测报告,存在滞后性。基于此,本说明书实施例提供一种小程序的压力测试方案。
23.如图1所示,图1为本说明书实施例所提供的一种小程序的压力测试装置的系统的架构示意图。在该提供中,小程序的开发者通过客户端可以进行压力测试的配置,服务端针对开发者的请求进行必要信息的组装,并在云端进行并发的模拟测试,从而实现对于开发者而言的一键式压力测试。
24.如图2所示,图2为本说明书实施例提供的一种小程序的压力测试方法的流程示意图,包括以下步骤:
25.s201:接收客户端所发送的压力测试请求,确定所述压力测试请求所对应的n个实例。
26.在如1所示的架构中,小程序的开发者可以在本地客户端中展示用于创建和配置
压测任务的页面。具体而言,小程序的开发者可以通过登录客户端,并指示所需要进行压力测试的小程序(同一个开发者可能会有多个需要测试的小程序),以及,配置小程序所需要的资源(包括图片、视频),所需要承受的压力大小(例如,并发数量、最高同时在线用户数量),并且,还可以指示需要服务端返回相应的指标值来做参考,具体的指标值可以包括诸如最大响应时间、最小响应时间以及每秒处理的事务数目(transactions per second,tps)、每秒能处理查询数目(queries per second、qps)等等。
27.在本说明书实施例中,一个实例用于向某个地址或者接口发起一定数量的并发访问(例如,10个并发访问或者100个并发访问)。实例具有不同的规格配置,一些低配置的实例可发起的并发数量较小,而一些高配置的实例可发起的并发数量则可能较大。
28.服务端在接收到所述压力测试请求,即可以基于所述压力测试请求以及服务端中所预留的实例来确定需要调用的实例数量n。如果接收到的压力测试请求中所携带的并发数量较低,则可以在公有池中去随时取实例并按照所需要使用的数量进行测试;而如果接收到的压力测试请求中所携带的并发数量较大(例如,超过5万),那么则需要在公有池中预留一些大规格高配置的实例去使用。在实际应用中,由于调用大规格高配置的实例往往会号位更多的资源,因此,可以通过动态的方式来基于用户的实际需求调用实例,从而降低开发者的成本。
29.s203,获取所述压力测试请求所对应的小程序资源和对应的静态服务。
30.小程序的开发者可以预先通过客户端将小程序资源上传至服务端。小程序资源可以包括小程序运行时所需要的代码、文字、图片以及所需调用的接口服务等等。从而可以将小程序资源进行下载至本地,并创建对应的文件地址,从而基于所述文件地址创建小程序资源在调用时所需要的静态服务。所述静态服务包括诸页面服务、静态资源传输以及下载服务等等。
31.在这个过程中,需要说明的是,若服务端本地的设备满足所述压力测试请求所对应的n个实例在运行时所需要的性能,那么,服务端的本地设备可以将所述小程序资源下载至本地并创建对应的静态服务。而若服务端本地的设备的性能不足时,则可以在如图1所示的架构中调用云端服务,将所述小程序资源发送至云端设备,并在所述云端设备中创建对应的静态服务。
32.s205,创建虚拟化容器,在所述虚拟化容器中渲染所述小程序资源。
33.服务端可以基于并发所需要的性能选择在本地设备或者在云端设备进行虚拟化容器的创建,并在创建好的虚拟化容器中基于所述小程序资源进行渲染,从而实现对于所述小程序的全部资源的模拟启动。
34.s207,在所述虚拟化容器中根据所述静态服务开启n个实例访问已渲染的小程序。
35.在小程序渲染成功之后之后,即可以基于前述已经准备好的n个实例访问所述已渲染的小程序。具体而言,实例可以启动预先保留的多个测试账户,并通过所述多个测试账户通过所述静态服务获取相应资源,并模拟访问所述已经渲染的小程序。在这个过程中,每个测试账户访问小程序中所的网络请求均会被触发,同时对于小程序中所需要访问的资源也均会被渲染,做到全资源覆盖。
36.此外,在这个过程中,访问小程序的链路是基于开发者所提供的小程序资源模拟渲染而来,也就是在虚拟化容器中所产生的模拟访问实际上是基于小程序的自身业务逻辑
所控制的,不会产生链路失真的问题。
37.s209,获取访问过程中所产生的访问数据,将所述访问数据发送至所述客户端。
38.每个实例在模拟访问所述小程序的过程中均会产生相应的数据。例如,每个实例在访问过程中可以通过监听不同的接口、对于小程序资源的请求的情况对访问数据进行实时收集,并采用心跳上报的方式给服务端进行入库操作,从而生成格式化的访问数据。
39.服务端皆可以将所述格式化的访问数据返回至客户端进行展示,以便小程序的开发者可以实时的了解在给定的并发数值下,将会有什么样的表现。
40.此外,服务端还可以对格式化的访问数据进行进一步的处理,生成在压力测试请求中所包含的由开发者配置的压力测试指标的指标值,并将这些指标值返回至客户端,从而开发者可以更直观的观看得到相应的指标数据。
41.通过接收客户端所发送的压力测试请求,确定所述压力测试请求所对应的实例数量n,n为大于1的自然数;获取所述压力测试请求所对应的小程序资源和对应的静态服务;创建虚拟化容器,在所述虚拟化容器中渲染所述小程序资源;在所述虚拟化容器中根据所述静态服务开启n个实例访问已渲染的小程序;获取访问过程中所产生的访问数据,将所述访问数据发送至所述客户端。从而实现模拟并发访问小程序的方式,还原消费者从打开小程序到页面渲染成功的全链路过程,开发者无需额外配置设备,即可以随时按实际需要进行压力测试,更为便捷。
42.在一种实施例中,在确定所述压力测试请求所对应的n个实例时,可以基于请求中所携带的并发数值和实例所给定的模拟访问值共同确定。即获取所述压力测试请求中由用户所配置的并发数值;确定所述实例所对应的模拟访问值;根据所述并发数值和所述模拟访问值确定所述压力测试请求所对应的n个实例。
43.在服务端或者云端可以预先配置好多种不同规格的实例以供调用,每种规格下的实例可以有多个。例如,可以预先设置4种不同规格的实例,模拟访问值分别为10、100、1000和5000,从而,当一个压力测试请求中携带的并发数值为1万是,即可以有限调用可用的实例中模拟访问值最大的实例,从而根据所述并发数值和所述模拟访问值确定所述压力测试请求所对应的2个模拟访问值为5000的实例。
44.此外,在这个过程中,较大模拟访问值的实例可能会出现预留(即被预定),那么则可以在较大规格的实例不足时,依次往下调用次一级规格的实例即可。从而实现动态的实例调用,避免资源浪费。
45.在一种实施例中,当本地设备满足进行压力测试所需要的性能时,创建虚拟化容器可以在服务端的本地设备进行。例如,假设本地设备可以满足并发数量为100以下的实例调用,则可以在本地设备中创建虚拟化容器并进行后续的压力测试。
46.更为常见的情形中,基于开发者所需要测试的并发数量可能数值较大,当本地设备不能满足进行压力测试所需要的性能时,则可以通过向云端设备发起远程调用,从而在在所述云端服务所对应的云端设备中创建虚拟化容器。例如,可以在服务端和云端之间建立通讯,并通过相应的云函数确定在云端调用时所需要的资源。
47.云端在创建好虚拟化容器之后,后续的实例调用即同样需要在云端设备进行。基于此,服务端需要将小程序的资源地址发送至所述云端设备,以便云端设备从所述资源地址拉取得到所述小程序资源,并将拉取得到的小程序资源存储于所述云端设备中,这样就
产生了一个目录地址,该目录地址表征了拉取得到的小程序资源在所述云端设备中的路径,从而云端设备可以基于所述目录地址提供所述小程序资源在所述云端设备中所对应的静态服务。
48.在一种实施例中,在所述虚拟化容器中根据所述静态服务开启n个实例访问所述已渲染的小程序时,可以采用无头浏览器的方式来开启。即在所述虚拟化容器开启与所述n个实例对应的n个无头浏览器;每个实例通过对应的无头浏览器和所述静态服务访问所述小程序。
49.无头浏览器(headles browser)是一种没有操作界面的浏览器,即无法在屏幕上直接看到测试的实际执行情况,但是访问过程中所产生的数据依然可以被抓取。利用无头浏览器其提供的api,可以自动执行操作指令。在并发访问时,通过执行多个无头浏览器的方式可以降低系统的负载。常见的无头浏览器可以包括诸如headless chrome、html unitdriver等等。
50.在一种实施例中,在所述虚拟化容器中渲染所述小程序时,可以采用所述小程序所对应的宿主浏览器,并且在所述虚拟化容器中启动所述宿主浏览器,将所述小程序资源移植至所述启动的宿主浏览器中进行渲染。需要说明的是,宿主浏览器也可以是无头浏览器,也可以是正常浏览器。
51.宿主浏览器指的是小程序在实际应用中被启动时所依赖的浏览器。例如,小程序a需要被部署至用户客户端1中,客户端1若采用的是chrome浏览器,则小程序a的宿主浏览器即为chrome浏览器。整个测试过程由于都发生在服务端一侧,实际上服务端可以预先知晓宿主浏览器的类型;以及,小程序的开发者也可以在压力测试请求中配置好宿主浏览器的类型,以便服务端进行配合测试。
52.例如,假设在压力测试请求中开发者指定小程序的宿主浏览器是chrome,那么即可以在所述虚拟化容器中启动headless chrome,并将所述小程序资源移植至所述headless chrome中进行渲染。在这个过程中,宿主浏览器本身还可以提供相应的接口。例如,在headless chrome中,其可以通过一个开源node库puppeteer所提供的一个高级api来通过devtools协议控制宿主浏览器chrome,从而可以完整的模拟实现小程序咋宿主浏览器中的渲染情形,避免宿主环境丢失的问题。
53.在一种实施例中,获取访问过程中所产生的访问数据可以包括确定访问过程中所采用的多个接口,获取访问所述多个接口的流量数据;确定所述小程序中的资源被渲染时的渲染数据。
54.例如,在通过puppeteer启动访问过程时,puppeteer可以提供网络请求监听能力,通过监听不同接口、资源请求的情况实时收集并采用心跳上报的方式给服务端进行入库操作,生成格式化的访问数据。puppeteer可以同时监听每个实例在访问过程中所采用的接口的流量、访问时间以及资源的渲染时间、渲染程度等等。通过不同维度的访问数据可以更加全面的测试出小程序的压力承受能力。
55.在一种实施例中,服务端将所述访问数据发送至所述客户端时,还可以将可视化所述访问数据,生成可视化的访问数据;将所述可视化的访问数据发送至所述客户端。可视化的方式可以包括将前述格式化的数据生成随时间动态变化的图片、表格等等形式,并将生成的图片、表格返回至所述客户端,从而开发者可以直观的了解得到在自己所配置的压
力测试请求下小程序的性能。如图3所示,图3为本说明书实施例所提供的一种系统中进行测试的逻辑框架示意图。在该示例图中,开发者可以通过对压力测试请求中所包含的并发数进行配置,服务端通过云函数调用并发n个实例,采集得到访问数据并将数据进行实时的心跳上报,从而测试得到开发的小程序的压力承受极限,生成的可视化图片将即时的返回至开发者。从而实现即时的压力测试的数据展示。
56.基于同样的思路,本说明书一个或多个实施例还提供了上述方法对应的装置和设备,如图4、图5所示。
57.在第二方面,如图4所示,图4为本说明书实施例提供的一种小程序的压力测试装置的结构示意图,所述装置包括:
58.接收模块401,接收客户端所发送的压力测试请求,确定所述压力测试请求所对应的实例数量n,n为大于1的自然数;
59.获取模块403,获取所述压力测试请求所对应的小程序资源和对应的静态服务;
60.虚拟模块405,创建虚拟化容器,在所述虚拟化容器中渲染所述小程序资源;
61.访问模块407,创建虚拟化容器,在所述虚拟化容器中根据所述静态服务开启n个实例访问所述小程序;
62.发送模块409,访问过程中所产生的访问数据,将所述访问数据发送至所述客户端。
63.可选地,所述接收模块401,获取所述压力测试请求中由用户所配置的并发数值;确定所述实例所对应的模拟访问值;根据所述并发数值和所述模拟访问值确定所述压力测试请求所对应的n个实例。
64.可选地,所述访问模块407调用云端服务,在所述云端服务所对应的云端设备中创建虚拟化容器。
65.可选地,所述访问模块407,送资源地址至所述云端设备,所述云端设备从所述资源地址拉取所述小程序资源,并确定所述小程序资源在所述云端设备中所对应的静态服务。
66.可选地,所述访问模块40,7所述虚拟化容器开启与所述n个实例对应的n个无头浏览器;每个实例通过对应的无头浏览器和所述静态服务访问所述小程序。
67.可选地,所述虚拟模块405,定所述小程序所对应的宿主浏览器;在所述虚拟化容器中启动所述宿主浏览器,将所述小程序资源移植至所述启动的宿主浏览器中进行渲染。
68.可选地,所述发送模块409,确定访问过程中所采用的多个接口,获取访问所述多个接口的流量数据;确定所述小程序中的资源被渲染时的渲染数据;将所述流量数据和所述渲染数据确定为访问数据。
69.可选地,所述发送模块409,可视化所述访问数据,生成可视化的访问数据;将所述可视化的访问数据发送至所述客户端。
70.在第三方面,如图5所示,图5为本说明书实施例提供的一种电子设备的结构示意图,所述设备包括:
71.至少一个处理器;以及,
72.与所述至少一个处理器通信连接的存储器;其中,
73.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一
个处理器执行,以使所述至少一个处理器能够执行如第一方面所述的方法。
74.在第四方面,基于同样的思路,本说明书实施例还提供了对应于上述方法的一种非易失性计算机存储介质,存储有计算机可执行指令,当计算机读取存储介质中的计算机可执行指令后,该指令使得一个或多个处理器执行如第一方面所述的方法。
75.在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmable logic device,pld)(例如现场可编程门阵列(field programmable gate array,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advanced boolean expression language)、ahdl(altera hardware description language)、confluence、cupl(cornell university programming language)、hdcal、jhdl(java hardware description language)、lava、lola、myhdl、palasm、rhdl(ruby hardware description language)等,目前最普遍使用的是vhdl(very-high-speed integrated circuit hardware description language)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
76.控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(application specific integrated circuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmel at91sam、microchip pic18f26k20以及silicone labs c8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
77.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
78.为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
79.本领域内的技术人员应明白,本说明书实施例可提供为方法、系统、或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
80.本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
81.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
82.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
83.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
84.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
85.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
86.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要
素的过程、方法、商品或者设备中还存在另外的相同要素。
87.本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
88.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、非易失性计算机存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
89.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
90.以上所述仅为本说明书的一个或多个实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书的一个或多个实施例可以有各种更改和变化。凡在本说明书的一个或多个实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。