【发明内容】
基于此,有必要提供一种能够减少服务器的计算资源浪费的页面更新方法。
一种页面更新方法,包括下列步骤:客户端发起请求;服务器处理所述请求,统计出受所述请求影响的组件,并获取所述组件的标识,将所述标识返回给客户端;所述客户端根据所述标识发起所述组件的渲染请求;所述服务器处理所述渲染请求,将渲染后的内容返回给所述客户端;所述客户端根据所述渲染后的内容刷新所述组件显示的内容。
优选的,所述服务器处理所述请求,统计出受所述请求影响的组件的步骤包括:创建受所述请求影响的组件集合,将所述请求对应的组件记入所述组件集合中;获取所述请求对应的组件中定义的事件,将与所述事件相关的组件记入所述组件集合中。
优选的,所述获取所述请求对应的组件中定义的事件,将与所述事件相关的组件记入所述组件集合中的步骤包括:获取所述请求对应的组件中定义的事件,将接收所述事件的组件记入所述组件集合中;根据所述服务器处理所述事件的过程中触发的新事件将接收所述新事件的组件记入组件集合中,直至不再有新事件触发。
优选的,所述请求是动作请求,所述渲染请求是异步请求。
优选的,所述将所述标识返回给客户端的步骤是将所述标识通过HTTP请求响应头返回给客户端。
还有必要提供一种能够减少服务器的计算资源浪费的页面更新系统。
一种页面更新系统,包括客户端和服务器,所述客户端包括请求模块和显示模块,所述服务器包括请求处理模块和渲染模块;所述请求模块用于向服务器发起请求;所述请求处理模块用于处理所述请求,统计出受所述请求影响的组件,并获取所述组件的标识,将所述标识返回给客户端;所述请求模块还用于根据所述标识发起所述组件的渲染请求;所述渲染模块用于处理所述渲染请求,将渲染后的内容返回给所述客户端;所述显示模块用于根据所述渲染后的内容刷新所述组件显示的内容。
优选的,所述请求处理模块包括:组件集合创建模块,用于创建受所述请求影响的组件集合;请求组件记入模块,用于将所述请求对应的组件记入所述组件集合中;相关组件记入模块,用于获取所述请求对应的组件中定义的事件,将与所述事件相关的组件记入组件集合中。
优选的,所述相关组件记入模块包括:触发事件记入模块,用于获取请求对应的组件中定义的事件,将接收所述事件的组件记入组件集合中;新事件记入模块,用于根据服务器处理事件的过程中触发的新事件将接收新事件的组件记入组件集合中,直至不再有新事件触发。
优选的,所述请求发起模块用于向所述服务器发起动作请求,所述渲染请求是异步请求。
优选的,所述请求处理模块是将所述标识通过HTTP请求响应头返回给客户端。
上述页面更新方法和系统,仅让受请求影响的组件在客户端发起渲染请求刷新自己显示的内容,通过局部刷新取代了现有技术中的请求重定向刷新整个页面的交互方式,减少了服务器的计算资源的消耗。
【具体实施方式】
为使本发明的目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
图1是一实施例中页面更新方法的流程图,包括下列步骤:
S21,客户端发起请求。
用户可在门户(portal)页面上对一个组件的控制链接进行操作,发起请求。在一个实施例中,该请求是动作请求(Action Request)。
S22,服务器处理请求,统计出受请求影响的组件。
S23,获取组件的标识,将标识返回给客户端。
在一个实施例中,是服务器将统计出的受影响的组件的标识通过HTTP请求响应头的方式返回给客户端。
S24,客户端根据标识发起组件的渲染请求。
在一个实施例中,客户端根据HTTP请求响应头返回的组件的标识,发起重新渲染受影响的组件的请求。
S25,服务器处理渲染请求。
S26,将渲染后的内容返回给客户端。
S27,客户端根据渲染后的内容刷新组件显示的内容。
上述页面更新方法,仅让受请求影响的组件在客户端发起渲染请求刷新自己显示的内容,通过局部刷新取代了传统技术中的请求重定向刷新整个页面的交互方式,减少了服务器端计算资源的消耗。
在优选的实施例中,步骤S24的渲染请求是一个异步请求,例如可以是AJAX请求,即异步Javascript和可扩展标记语言(XML)请求。由于采用了异步请求,在等待组件刷新的过程中,用户可以与页面上的其它组件进行交互,因此能够获得更好的用户体验。
在一个实施例中,上述组件是portlet。portlet是门户(portal)中可插拔的用户界面组件。从用户的角度来看,portlet是门户页面中提供特定服务或消息的窗口。从开发者的角度看,portlet被设计成在服务器的portlet容器中运行。
以下通过一个具体实施例对上述页面更新方法进行介绍。例如一个门户页面中有3个组件,分别为p1、p2、p3。p1为一个地图展示组件,用于展示城市信息;p2是一个天气预报组件,用于展示某个城市的天气;p3是一个日期组件,用于展示日期。当点击地图中的某个城市时,p1在客户端发起动作请求;在服务器端,p1触发一个事件,并将城市的标识返回给p2,p2处理这个事件,并记住要展示的城市的标识。整个过程中不会对p3有影响。但是在传统的动作请求处理方式中,即使整个过程中p3的状态不需要发生任何变化,整个门户页面都必须被刷新以获得页面的最新状态。而通过上述页面的更新方法,在服务器完成对动作请求的请求处理后,服务器统计出只有p1和p2受到影响,于是只将p1、p2的标识以HTTP请求响应头的方式返回给客户端,客户端根据返回的标识以异步请求的方式重新请求p1、p2的内容,然后局部刷新各自的内容。在这个过程中,p3没有任何改变,也不需要对整个页面进行刷新。
在一实施例中,步骤S22包括下列步骤:
步骤A,创建受请求影响的组件集合,将请求对应的组件记入组件集合中。
请求对应的组件即是指用户对一个组件的控制链接进行操作后,发起请求的那个组件。
步骤B,获取请求对应的组件中定义的事件,将与事件相关的组件记入组件集合中。
传统的组件规范中规定,每一个组件都可以在定义文件中定义其可以广播和接收的事件。在服务器处理事件的过程中,有可能会触发新的事件。因此在一个实施例中,步骤B包括:
步骤B1,获取请求对应的组件中定义的事件,将接收事件的组件记入组件集合中。
步骤B2,根据服务器处理事件的过程中触发的新事件,将接收新事件的组件记入组件集合中。步骤B2需要一直重复直至不再有新事件触发。
图2是一实施例中步骤S22的流程图。在该实施例中,步骤S22包括下列步骤:
S221,创建受请求影响的组件集合,将请求对应的组件记入组件集合中。
S222,判断请求对应的组件是否定义了事件,若是则进入步骤S223,否则进入步骤S23。
S223,触发事件,并将接收事件的组件记入组件集合中。
当请求对应的组件触发了事件时,遍历同一个页面上所有的组件,找出所有可以接收该事件的组件,将这些接收事件的组件记入组件集合中。
S225,服务器处理事件。
S226,判断处理过程中是否会触发新事件,若是则返回步骤S223,否则进入步骤S23。
在服务器处理事件的过程中,可能会有新事件触发,并被页面上其它组件接收,这时就要返回步骤S223,将接收的组件记入集合中。
步骤S223、S225和S226会一直持续下去,直到不再有新的事件触发。图3是处理动作请求的过程中受影响的组件的示意图。P1~P5是同一页面上的5个组件。P1发起动作请求,并广播事件,被P2接收。P2处理事件的过程中又广播事件给P4和P5。其中P5在处理事件过程中又触发事件被P2接收。P2处理过程中,又广播事件给P3。P3处理完后,整个事件的广播过程结束。则P1、P2、P3、P4、P5都是受该动作请求影响的组件。
本发明还提供一种页面更新系统。图4是一实施例中页面更新系统的结构示意图,包括客户端40和服务器50。客户端40包括请求模块410和显示模块420,服务器50包括请求处理模块510和渲染模块520。
请求模块410用于向服务器50发起请求。
请求处理模块510用于处理请求,统计出受请求影响的组件,并获取组件的标识,将标识返回给客户端40。
请求模块410还用于根据标识发起组件的渲染请求。
渲染模块520用于处理渲染请求,将渲染后的内容返回给客户端40。
显示模块420用于根据渲染后的内容刷新组件显示的内容。
在一个实施例中,组件是portlet。请求模块410用于向服务器50发起动作请求,渲染请求是AJAX请求。请求处理模块510是将标识通过HTTP请求响应头的方式返回给客户端40。
图5是一实施例中请求处理模块的结构示意图,在该实施例中,请求处理模块510包括:
组件集合创建模块512,用于创建受请求影响的组件集合。
请求组件记入模块514,用于将请求对应的组件记入所述组件集合中。
相关组件记入模块516,用于获取请求对应的组件中定义的事件,将与事件相关的组件记入组件集合中。
在一个实施例中,相关组件记入模块516包括:
触发事件记入模块,用于获取请求对应的组件中定义的事件,将接收事件的组件记入组件集合中。
新事件记入模块,用于根据服务器50处理事件的过程中触发的新事件将接收新事件的组件记入组件集合中,直至不再有新事件触发。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。