在客户机/服务器环境中 高效处理复帧数据的方法和系统 【技术领域】
本发明涉及客户机/服务器计算,更具体地说涉及更有效地处理复帧数据,以便传输给客户机工作站的技术,传送的数据可在客户机工作站被呈现,例如以工作站上的复帧图形用户界面显示的一帧或复帧的形式被显示。
背景技术
最近几年,客户机/服务器计算的普及已大大增加,主要归因于日益增长的公共因特网商务应用和客户应用,公共因特网地子集被称为“万维网”(或者简称为“Web”)。其它类型的客户机/服务器计算环境,例如公司内部网和外部网也正在日益普及。由于解决方案提供者集中于传送改进的基于Web计算,开发的许多解决方案可适用于其它客户机/服务器计算环境。从而,这里对因特网和Web的引用是出于举例说明的目的,而不是对本发明的限制(此外,交替使用术语“因特网”、“Web”和“万维网”)。
每天有数百万人使用因特网,不论是出于他们的个人乐趣还是出于商业目的或者二者兼有。作为电子信息和商业服务的客户,个人现在易于在全球的层面上访问资源。当用户是内容请求者时,返回响应的延迟或低效率会对用户满意度产生非常负面的影响,甚至导致用户转换到备选资源。于是,对用户满意度来说,关键是快速、高效地传送被请求的内容。
多数现代计算应用程序利用图形用户界面或者说“GUI”呈现他们的可显示输出。在诸如因特网之类客户机/服务器计算环境中,被称为“浏览器”的客户机软件通常负责向服务器应用程序请求内容,并呈递服务器作为响应发送的信息。通常,显示的信息被格式化成Web页,在Web页中,利用诸如超文本标记语言(“HTML”)之类标记语言定义Web页的布局。
Web页的布局可被定义为单帧或者复帧。这里使用的术语“复帧”指的是包含复帧的Web页。但是,应注意复帧的使用并不局限于Web页:任意类型的GUI窗口可被分成复帧。从而,这里提供复帧“页”的论述是用于举例说明,而不是对本发明的限制,这些论述应被理解为包括更一般的复帧窗口。
复帧显示的一个常见例子是文件管理器窗口。文件管理器窗口显示保存在计算机的存储装置上的文件或对象的目录结构。通常,利用窗口最左侧的分层树视图呈现该结构,在窗口的最右侧呈现选择的分层层次的保存文件或对象。这种呈现的一个例子是微软公司的WindowsExplorer应用程序(“Windows”是微软公司的注册商标)。文件管理器窗口一般不被设计成客户机/服务器应用程序。但是,如果在客户机/服务器环境中使用这种应用程序,目录结构适合于远程文件系统。当用户从显示的分层结构选择某一条目时,客户机应用程序可使用户的浏览器向远程服务器发送请求,要求和该级目录相关的细节(例如单个文件的列表和/或该级目录的子目录)。
使用复帧布局的另一常见例子是在具有内容表的出版物的显示中,这种情况下在窗口的最左侧显示内容表,当选择内容表中的某一条目时,在最右侧的窗口中显示相应的文本。在客户机/服务器环境中,一开始内容表可被传送给客户机浏览器,以便在Web页中呈现,用户从该显示中选择某一条目通常会向可从其获得出版物内容的服务器发送新的内容请求。按照这种方式,可渐进地取回文本。
这些是复帧窗口的例子,在复帧窗口中,一帧的内容可操作地与另一帧链接。即,最右侧窗格的内容依赖于用户从最左侧窗格中的目录结构分层或内容表中做出的选择。然而,一般情况下不需要复帧窗口各帧之间的这种链接关系,并且存在复帧只提供便利的组织途径的许多例子。例如,公司可能将其Web形象设计成公司的所有Web页具有共同的结构,每个Web页上具有共同的页眉和页脚。图1A表示了这种布局的抽象例子。该例子中,Web页的页眉100和页脚120可被设计成独立的帧,同时另一帧(或者可能复帧)被用于Web页的主体110。图110表示了类似的例子,该例子中增加了导航帧。导航帧可被用于利用参考文件管理器和内容表帧如上所述的帧之间的可操作链接,控制在Web页的主体中显示的内容。
在4.0版的HTML中强制实现对复帧Web页的浏览器支持,产生并使用了大量的复帧Web页。虽然复帧Web页的使用具有许多优点,包括内容丰富的Web页的设计,但是其缺陷在于在用户的工作站上刷新这些Web页(例如刷新或修订显示的内容)。特别地,当浏览器请求刷新复帧Web页的一帧时,现有技术中不存在发送供给被请求内容以及只用于需刷新的那些其它帧的内容的响应的机制。即,虽然目前的技术允许更新复帧中的单一一帧或者所有各帧,但是不存在刷新帧子集的现有机制。
由于先前显示数据的变化;由于用户请求带外的异步事件(即,和用户请求无关的变化);为了保持复帧同步(例如在文件管理器和内容表窗口例子中,从最左侧窗口中选择某一条目之后应接着刷新最右侧窗口);等等,希望刷新或更新某一帧。(下面,当涉及重新显示帧或页面时,同义使用术语“更新”、“刷新”和“重新加载”)。对于服务器来说,现有机制是通过只发送浏览器明确请求的帧作出反应,或者通过发送完整复帧Web页作出反应,完整复帧Web页包括其包含的所有各帧(例如,利用服务器产生的程序脚本代码强制重新加载整个页面);或者,可使用诸如支程序之类客户机方逻辑或特殊标记语言语法。
作为在客户机方使用诸如支程序之类逻辑的一个例子,代码可被编写成依次关于各帧反复轮询服务器,从而反复重新加载各帧(不考虑是否需要重划各帧)。作为使用特殊标记语言语法使客户机请求帧刷新的一个例子,可在用HTML编码的Web页内使用“META”标记结构,以便识别刷新间隔和识别要刷新的内容的统一资源定位符(“URL”)。例如,下述META标记导致利用从URLwww.ibm.com取回的内容每10个时间单位刷新表现图:
<META HTTP-EQUIV=“Refresh”CONTENT=“10;URL=http://www.ibm.com/”>
这些现有方法均存在缺陷。当使用META标记标记语言结构时,如果指定要刷新的URL是目前在工作站呈现的页面,则反复刷新导致连续轮询效果—即,每隔刷新间隔的重复取回(可在服务器编程产生META标记语法,强制实现这种重新加载,或者在一些情况下,可在页面中静态定义META标记语法)。
如果服务器发送整个复帧页面,即使一些帧未发生变化,这是资源的低效使用,并且会浪费相当数量的网络带宽。另外,刷新页面所需的时间会显著增大,由于相同帧的多次重新加载,会发生“浏览器帧闪现”。相反地,如果服务器只发送所请求的帧,而不考虑需要刷新的其它帧,则显示的GUI可能呈现陈旧或无效的信息。客户机方轮询方案在客户机引入相当大的开销,导致服务器资源和网络带宽的低效使用,并且由于帧被反复重新加载(其中的许复帧可能不必进行任何更新),导致不必要的视觉闪烁。
因此,需要处理复帧数据的改进技术。
【发明内容】
本发明的目的是提供处理复帧数据的改进技术。
本发明的另一目的是定义更有效地重新加载复帧页面的技术。
本发明的另一目的是提供有选择地刷新复帧页面的多个帧的技术。
本发明的另一目的是能够在单一响应中,传送浏览器所请求帧的内容,以及导致刷新未明确请求的其它帧的数据。
本发明的另一目的是定义响应同步和/或异步事件,刷新复帧显示画面的技术。
本发明的另一目的是定义把GUI对象异步加入GUI显示画面中的技术。
本发明的其它目的和优点将在下面的说明和附图中陈述,并且部分地,根据所述说明将是显而易见的,或者可通过实践本发明而了解。
为了实现前述目的,并且根据这里粗略说明的本发明的目的,本发明提供在客户机/服务器计算环境中,高效处理复帧数据的方法、系统和计算机程序产品。在一方面,该技术包括:在客户机/服务器环境中的服务器中,为构成复帧布局的多个帧中的每一帧保存与该帧相对应的指示符,其中对应的指示符指示该帧是否需要被加载;和在从服务器到客户机的消息中,发送(1)与所述多个帧中一个特定帧相对应的内容,(2)其对应指示符指示一个或多个其它帧需要被加载的所述一个或多个其它帧的数据,其中所述一个或多个其它帧的数据向客户机通知所述一个或多个其它帧需要被加载。
最好响应服务器接收来自客户机的请求,从服务器发送所述消息,并且所述请求与对应于多个帧中所述一个特定帧的内容相关。
该技术最好还包括在客户机接收从服务器发送的消息;并在客户机中,在复帧布局内呈现和多个帧中所述一个特定帧对应的内容。该技术最好还包括响应收到所述消息及其用于一个或多个其它帧的数据,客户机向服务器发送关于所述一个或多个其它帧中各帧的刷新内容的请求。这种情况下,该技术还可包括:客户机向服务器发送关于所述一个或多个其它帧中各帧的刷新内容的请求;在客户机接收服务器响应收到关于刷新内容的请求而发送的后续消息;并在客户机,在复帧布局内呈现和所述一个或多个其它帧对应的内容,其中在后续消息中接收该内容。所述呈现可以是,例如视觉呈现。
可利用程序脚本代码指定所述一个或多个其它帧的数据,最好利用标记语言(例如HTML)对内容编码。
由于相应帧的内容的变化,由于相关帧的内容的变化,和/或由于位于服务器的异步处理,可能需要加载某一帧(于是,可设置其相应的指示符)。
最好在服务器对复帧布局中需要加载的各帧的索引排队。随后可在发送消息之前处理排队索引,以便识别所述一个或多个其它帧。在优选实施例中,索引可被排队,随后删除多余的索引。另外,对于具有排队索引的各帧来说,最好删除早先排列的其派生帧的索引, 因为该索引多余。在备选实施例中,阻止已具有排队索引的帧排队。如果多个帧中一个特定帧的原始帧具有排队索引,那么当向客户机发送消息时,最好使和所述一个特定帧对应的内容减至最少。
可选的是,代替或者除了所述一个或多个其它帧的数据之外,从服务器发送给客户机的消息可包含将在客户机呈现的一个或多个图形用户界面的指示。
【附图说明】
下面参考附图说明本发明,附图中相同的附图标记表示相同的单元。
图1A和1B提供了根据现有技术的使用复帧的例证Web页布局;
图2A-2C描述了例证的文件管理器窗口,所述窗口使用复帧,并被用于举例说明本发明的优选实施例的操作;
图3-8参考图2A-2C的文件管理器例子,提供了优选实施例用于有效加载复帧页面的逻辑的流程图;
图9图解说明了优选实施例可识别样本复帧页面内将被有选择刷新的其它帧的一种方式,并涉及图10A的例证分层帧布局(并且图10B对应于图10A中的该布局);和
图11提供了响应诸如图9中所示调用语法,可被调用以便有选择地刷新帧的例证代码。
【具体实施方式】
本发明提供有效加载复帧Web页或复帧窗口的帧的新技术。作为服务器发送其对单一客户机请求消息的响应的结果,可加载复帧。服务器方逻辑知道哪些帧需要加载,而不考虑这些帧的变化是与客户机关于帧的请求同步还是与该请求异步。从而,当客户机请求单帧的数据时,除了发送所请求帧的数据之外,服务器还发送刷新需要加载的其它帧(下面意义相同地称为“变化帧”)的数据。在优选实施例中,刷新其它变化帧的数据包含强制客户机浏览器请求加载每个变化帧的指示符。更具体地说,刷新内容的数据最好是附到服务器的响应上的脚本,这里用程序脚本语言(例如Javascript语言;“Javascript”是太阳微系统公司的注册商标)对该脚本编码。但是,不发送刷新未变化帧的内容的数据,从而和现有的复帧重新加载技术相比,本发明的选择帧加载方法更有效地使用带宽,并且题名快速地刷新页面。优选实施例还把关于某帧的多次重新加载压缩到单一响应中,从而传输效率进一步提高。所公开的技术避免了现有方法导致的浏览器帧的闪烁或颤动。不需要任何额外的客户机方逻辑。
作为使用本发明处理异步帧显示的一个例子,客户机可能已请求更新一帧,而服务器方逻辑检测到需要在客户机GUI上显示消息框或者其它GUI对象(而不考虑客户机请求的是哪帧)。随后可把消息框信息和所请求的内容一起传送给客户机。这种异步显示机制可用于向用户呈现某帧,而不考虑对用户来说,该帧目前是否可见,或者目前是否存在用于该GUI对象的帧(异步显示还和目前可见的帧相关,例如当服务器方事务逻辑中的处理影响在和客户机请求的帧相同的最初页面或窗口内呈现的不同帧的内容时。异步变化可能是按照特定于应用程序的方式影响帧或对象的端口监控程序(daemon)或其它服务器方线程处理的结果。例如,特定的应用程序可在帧中显示状态信息,于是即使客户机不明确请求刷新,该帧也需要定期刷新)。
根据优选实施例,服务器方逻辑的单元注册为特定事件的监听器。当发生事件时,自动向所有注册监听器发送通知(注册为监听器,并且当发生事件时,发送和接收通知的机制在本领域中众所周知,本发明的实施例最好借助(leverage)现有技术。将关于来自事务逻辑的更新注册的监听器之一是与该事务逻辑的查看相关的帧。当事务逻辑改变该帧内容时,该帧接收更新事件,从而知道它需要被刷新。下面将参考图2A-2C的例证文件管理器,更详细地说明监听器应答事件的方式。
优选实施例使用复帧页面各帧的状态指示符(例如二进制标记或二进制属性)指示自从最新的帧重新加载被发送给客户机以来,帧的内容是否已被修改。从而,当事务逻辑导致帧内容的改变时,设置状态指示符。另一方面,出于需要重新加载帧的其它原因,也可设置指示符。这里状态指示符也被称为“脏位”,设置脏位同样指的是把帧标记为“脏帧”。
在优选实施例中使用一队脏帧优化帧重新加载过程。当帧是脏帧时,在重新加载队列上设置该帧的索引。当从客户机发出的帧刷新请求到达时,评估队列中的条目,确定其它各帧是否需要被刷新。这样,提供一种按需求驱动的方法,该方法导致只刷新已变化的各帧。(在优选实施例中,脏帧索引都被排队,通过稍后,例如当收到客户机的刷新请求时,处理该队列,消除了任意重复/多余的条目。后面参考图7和8说明这种处理。在备选实施例中,在对脏帧的索引排队之前,可扫描队列条目,如果找到该帧的早期排队索引,则该帧索引不再排队_因为当收到下一刷新请求时,取回该帧的当前内容只需要一个索引即可。但是,应注意的是这种备选方法会导致效率降低。例如,有可能发生用户转移到不同的Web页的情况,这种情况下排队的帧索引被丢弃。这种情况下,队列扫描开销被浪费)。由于在优选实施例中,多个帧更新被合并到单一排队帧索引中(以及在备选实施例中在处理排队索引之后,被合并到单一刷新指示符中),极大地降低了位于接收器的帧闪烁,带宽的使用更高效。优选的和备选实施例最好还通过借助嵌套帧之间的父-子关系,优化队列处理和帧重新加载。即,一旦父帧(或者更一般地说,初始帧)的帧索引已排队,则由于重新加载父帧/初始帧会自动重新加载子帧/派生帧,因此早期接收的子帧(或者更一般地说,派生帧)是多余的。从而,从重新加载队列中除去这些子帧/派生帧的帧索引可进一步降低帧闪烁,进一步优化带宽的使用。
应注意的是可借助与客户机浏览器的(某一帧或另一帧)的帧刷新请求异步的处理,设置该帧的脏位。从而,由于这些异步变化的结果,帧索引可被加入重新加载队列中,当客户机浏览器的刷新请求到达时,可处理这些排队索引。
一旦脏帧被刷新,则其“脏位”被重置(实际上,把该帧标记为“净”帧)。本发明使用称为“帧重新加载管理器”的服务器方组件处理脏帧队列。帧重新加载管理器监听脏位的变化,当被通知特定帧的重置时,它从重新加载队列中除去该帧的任何排队索引。
下面参考图2A-2C中的例证复帧页面,说明优选实施例。例证的文件管理器显示画面200具有显示远程文件系统的分层结构的左帧230,和显示在文件系统结构的选择层次保存的文件或对象的右帧255。可在独立的帧中显示标题235,“文件管理器”。在图2A中,首先出现命名为“Top”205的最顶层(为的是举例说明),该最顶层具有命名为“1A层”210和“1B层”220的两个子单元或节点。“1A层”210被表示成展开状态(由单元名称左侧图形中的“-”符号表示),具有命名为“2A层”、“2B层”…,“2N层”(统一表示为215)的、“N”个子单元。“1B层”220被表示成未展开状态(由单元名称左侧图形中的“+”符号表示),并被表示为已被选择(由环绕该单元名称的虚线矩形表示,在本例中这代表突出显示)。在图2A的例子中,右侧的内容帧255表示1B层220包含名为“2A层”240,“2B层”245和“2C层”250的三个对象。
现在假定用户决定展开1B层220的分层显示画面。这表示在图2B中,其中位于220的“+”号图形被改变为位于220′的“-”号图形,在展开信息225中显示三个子单元“2A层”,“2B层”和 “2C层”。展开层1B 220没有导致对右帧255的改变,三个对象240、245和250显示在右帧255中,于是,和图2A相比没有变化。从而,本发明的一个实施例只把左帧标记为脏帧(dirty),并假定不存在导致把其它帧标记成脏帧的异步变化,只有如230′中显示的左帧内容将响应展开请求被传送给客户机浏览器。
假定用户随后从图2B中的显示画面选择位于225的三个显示单元中的最后一个显示单元,表示他希望查看2C层的保存文件和对象。通常,将突出显示呈递的显示画面,如图26C的环绕单元名称的虚线矩形所示。这种突出显示是对帧230′的改变,从而本发明的实施例把左帧标记为脏帧。当刷新时,左帧表现为如图2C的修订帧230″中所示。本例中,用户从左帧选择某一单元的语义要求右帧被更新,从而定位于2C层260的保存对象,其图形表现(265、270、275、280)将显现在修订后的帧255′中。于是,右帧也将被本发明的实施例标记为脏帧。于是,客户机请求导致随同浏览器应发送后续刷新请求,以便取回图2C的帧255′中所示的新内容的指示(最好,程序脚本代码)一起,发送帧230″中所示的新内容。
于是,本发明的应用允许在图2C的节点选择情况中,有效地重新加载变化帧230″、255′,而在图2B的节点展开情况中,只重新加载单一变化帧230′。注意在这两种情况下标题帧都不被更新,因为标题没有发生变化。显然,在复帧页面内帧数远远多于图2A-2C的简单例子中的帧数的情况下,这里公开的帧的选择性重新加载更为有利。
现在参见图3-8中的流程图,现在说明实现优选实施例的逻辑。将参考图2A-2C的例证文件管理程序说明该逻辑,但是对本领域的普通技术人员来说,其对应用程序的扩展将是显而易见的。
在复帧HTM L环境中,要在各帧中呈现的内容与其它帧的内容无关。即,各帧中的内容一般是一个HTML文档,通过规定帧标记的源(“src”)属性,识别该文档,这里该属性的值是该文档的地址。本发明使用帧重新加载管理器在复帧布局内统一文档,从而可响应客户机的初始请求,在相应的帧中,有效地重新加载多个文档。通过确定特定帧的子帧和/或父帧,或者更一般地说,确定特定帧的派生帧和原始帧,帧重新加载管理器能够确定帧之间的分层关系。
图3图解说明了优选实施例的高级处理,发客户机浏览器发送内容请求(方框305)时开始该处理(方框300)。当服务器接收该请求时(方框310),服务器检查该请求是否是与用户的对话中关于复帧(“MF”)页面的初始请求(方框315)。如果是,则方框320建立该复帧页面的GUI(参考图4更详细地说明)。(只有对与用户的每个新对话,才采用始自方框315的“是”路径。因此,为每个用户对话产生帧重新加载管理器的新实例;参见图4的方框410。该实例随后用于整个用户对话的所有后续请求,所述整个用户对话将沿着始自方框315的“否”路径前进)。复帧内容随后被返回给客户机浏览器(方框325),之后,客户机浏览器一般呈递返回的内容(方框355)。
如果不是关于复帧页面的初始请求,则方框330检查客户机的请求是否是关于复帧页面内帧之一的内容的请求。如果检查结果是肯定的,则方框335调用被请求帧的事务逻辑,如参考图5和6更详细说明的那样。随后,方框340检查是否需要呈递其它帧(或者其它GUI对象)。参考图7和8更详细地说明了该过程。随后把被请求帧的内容(不考虑其变化指示符),和要呈递的其它帧/对象的变化指示符一起返回给客户机浏览器(方框345)。最好,这些“变化指示符”(这里也被称为刷新内容的数据)包含程序脚本代码(以Javascript表示),所述程序脚本代码将用信号通知客户机随后请求其中识别的各帧/对象的内容。关于样本复帧页面的各帧,如何对这些变化指示符编码的例子参考下面的图9和10的说明。(为了易于参考,这里的说明主要在呈递各帧的方面,不过如前所述,所公开的技术也可用于呈递对象。此外,可能发生服务器方逻辑请求呈递一个或多个先前未呈递的帧。从而,这里对“刷新”或“重新加载”的引用应被理解为包括初始加载帧的情况。)
作为本发明的优选实施例实现的优化,当所请求帧的内容被格式化以便返回给客户机时(上面的方框345),可以空帧或极少内容,占位符帧(例如,具有简单的“Loading…”消息)的形式产生该内容。当变化指示符将被发送给请求者,以便加载被请求帧的原始帧时,最好使用这种优化。由于必须返回客户机请求的帧,因此根据标准超文本传送协议(“HTTP”)程序,当知道该帧将被重叠在其原始帧的后续表现图上时,这种优化减少了返回该帧所需的带宽。另外,这种优化提高了响应时间,并且可消除起源于两次重新加载相同内容的帧闪烁(另外参见下面图7的方框725和750的说明,在所述说明中,讨论了按照这种方式优化传输的判定)。
如果客户机的请求不是关于复帧页面的初始请求或者不是关于复帧页面内某一帧的请求,则可如同现有技术中那样处理该请求(方框350)。即,被请求的内容被服务器定位,并被返回给客户机以便呈现。另一方面,本发明的实施例可执行图7和8中图解说明的处理,以便确定是否应把服务器方事务逻辑确定应呈现的其它帧(或者其它GUI对象)通知客户机;这种情况下,当返回所请求的内容时,该内容最好伴随将用信号通知客户机发出其它内容请求的变化指示符,例如程序脚本代码。
在客户机在方框355表现返回(即请求)的内容时,根据优选实施例,方框360指示通过把控制返回给方框305,并发出关于所识别帧/对象的请求,客户机将处理与所述内容包含在一起的任意变化指示符。如果不存在要处理的其它变化指示符,则控制到达方框365,随后结束关于该请求的处理。
图4描述了可用于初始建立复帧页面的GUI的逻辑,当被方框320调用时,开始处理(方框400)。方框410初始化帧重新加载管理器组件。这种初始化包含产生帧重新加载队列。
在优选实施例中保持帧层次的服务器方集合,这种集合包含各个复帧页面的分层的定义。按照这种方法,帧重新加载管理器能够有效确定帧之间的祖先/派生关系。当定义一个以上这样的分层时,集合包含森林型结构(特定复帧页面的复帧分层的例子,参见下面图10A和10B的说明)。因此,方框420和430例示当前复帧页面的新分层。在方框420中,例示复帧页面(它是包含多个子帧的父页面)。最好,该父页面例示各个子帧(方框430)。这些子帧中的一个或多个可具有它们自己的子帧,这些(孙辈)子帧的处理是递归的(并且类似于方框430-470的处理)。
在方框440中,帧重新加载管理器注册为所有帧的脏位的监听器(即用于设置和重设该位)。(即,所有帧被监听,帧重新加载管理器监听的是脏位的变化)。如方框450中所示,父帧也可按照特定于应用程序的方式,注册为选择的子帧/派生帧的监听器。另外,子帧/派生帧可按照特定于应用程序的方式,注册为其它帧(包括它们的兄弟帧)的监听器。例如,在前面参考图2A-2C说明的文件管理器例子中,最右侧帧最好注册为最左侧帧中选择事件的监听器(因为选择通常会导致需要在最右侧帧中显示的变化内容),但是不需要注册为最左侧帧中展开事件的监听器(因为本例中,最左侧帧中树节点的展开不会产生最右侧帧的更新内容)。
每个子帧最好产生其初始内容(方框460),之后,父帧集合初始页面内容(方框470),指针指向每个子帧。随后控制返回调用逻辑(方框480)。
图5和6描述了根据本发明,在文件管理器例子中,可在其处理中用于有选择地刷新(或者如前所述初始加载)帧的逻辑。该逻辑包括确定哪些帧将被标记为脏帧,标记这些帧,并排列脏帧的索引。显然,这些图中的逻辑是典型例子。一般情况下,会发生下述情况:
1.用于当前加载帧的事务逻辑不把任意其它帧标记为脏帧。
2.用于当前加载帧的事务逻辑导致被标记为脏帧的一个不同帧(例如兄弟帧)。(注意一个以上的这种帧可被标记为脏帧)。
3.用于当前加载帧的事务逻辑把父帧/原始帧标记为脏帧。
4.用于当前加载帧的事务逻辑把一个或多个子帧/派生帧标记为脏帧。
5.异步处理会导致被标记为脏帧的一个或多个帧。
根据本发明,情况1导致只加载当前帧,情况3和4导致加载最外面(即原始)帧及其所有派生帧。(注意在情况3和4中,都将加载原始帧。在情况3中,这是当前加载帧的原始帧。在情况4中,由于具有脏的派生帧,因此当前加载帧变成要重新加载的多个嵌入帧的最外层帧,从而该当前加载帧也是要加载的原始帧。参见下面图7和8的说明,其中描述了可适用的处理)。利用文件管理器例子图解说明了一个或多个“不同”帧被标记为脏帧的情况2,在文件管理器例子中,最外层帧的某些变化(即本例中,选择事件)导致最右侧帧需要刷新。从而,根据本发明的优选实施例,最右侧帧被标记为脏帧,使得当收到刷新最左侧帧的请求时,能够有选择地刷新最右侧帧。图5和6中表示了实现该情况的逻辑。情况5类似于情况,但是和处理当前加载帧的事务逻辑的线程不同的某一线程完成标记。根据这些附图,对本领域的普通技术人员来说,如何实现用于其它情况的逻辑是显而易见的。
图5提供了响应在图3的方框330接收客户机的节点展开请求,处理事务逻辑的展开最左侧帧中的树节点的请求(如方框500中所示)的逻辑。查找响应要展开的特定节点,将在最左侧帧中呈现的具体内容的位置(方框510),随后据此格式化最左侧帧的内容(方框520)。由于最左侧帧被客户机浏览器请求,因此如前所述,由于标准HTTP处理的缘故,必须将其返回给请求者。但是,优选实施例还把最左侧帧标记为脏帧,并把该帧的索引排列在重新加载队列中,以便优化向客户机浏览器器传送时带宽的使用。因此,设置最左侧帧的脏位(方框530)。于是把最左侧帧是脏帧通知帧重新加载管理器(方框540)。由于帧重新加载管理器是最左侧帧脏位的变化的注册监听器,因此这种通知最好自动进行。该脏帧的索引可被添加到重新加载队列中(方框550)。注意根据优选实施例,该帧索引随后将被除去。因为它是将作为标准HTTP处理的一部分自动返回给请求者的初始请求帧的副本。(一般情况下,如前所述,如果最左侧帧的其它索引或者原始帧的索引在重新加载队列中,那么随后会除去排队等待的帧索引。或者,在备选实施例中,如前所述,通过在排列新索引之前,评估排队索引,可取消这样的帧索引。)控制随后返回调用逻辑(方框560)。
图6中的逻辑响应在图3的方框330接收客户机的节点选择请求,处理事务逻辑的关于最左侧帧中某一树节点的选择请求(方框600)。据此格式化响应该选择请求的帧的内容(方框605)。由于左帧已发生变化(例如,用于表示哪一节点被选择的突出显示将被应用于不同节点),因此需要重新加载左帧,于是设置其脏位(方框610)。因此,把左帧是脏帧通知帧重新加载管理器(方框615),该脏帧的索引可添加到重新加载队列中(方框620)。更详细的信息参见上面图5的方框540和550的说明。
本例中,从树形结构中选择某一节点导致通知父帧,如方框625中所示,父帧随后调用事务逻辑,在右帧中显示所选择节点的信息(方框630)。通过查询远程计算机的操作系统,识别在分层文件系统的选择层次保存的文件或其它对象,事务逻辑查找右帧的新内容的位置(方框635)。随后据此格式化右帧,以便呈现所述新内容(方框640)。由于右帧的内容已变化,因此需要重新加载右帧,于是设置其脏位(方框645)。于是通知帧重新加载管理器右帧是脏帧(方框650),该脏帧的索引可被添加到重新加载队列中(方框655),如参考图5的方框550详细说明的那样。控制随后返回调用逻辑(方框660)。
显然,图3-6的处理已被简化,省略本领域已知的操作(例如如何例示和修订帧和视图),以便更好地图解说明本发明的新原理。
参见图7和8,描述了当处理客户机的帧刷新请求时,可被本发明的实现用于确定是否应在客户机呈现其它帧和/或GUI对象的逻辑。如果是,则产生恰当的变化指示符,例如程序脚本代码(由图9中的样本举例说明),以使客户机发出更多的内容请求。
图7的处理执行基本重新加载队列处理,调用图8的逻辑。当进入该逻辑时(方框700),把最近呈现的帧(这可利用HTTP的特征来确定)的索引从重新加载队列转移到新的处理集合中(方框705)(由于存在帧的森林型结构,即拆散的帧分层,因此不会响应客户机浏览器的请求重新加载队列中的所有帧。从而,一些索引会保留在重新加载队列中)。
作为性能的改进,方框710把索引加入客户机请求帧中,或者把“CRF”加入在方框705中产生的处理集合中。方框715随后最好通过调用根据指定的输入集形成集合的内置函数或者方法,除去任意重复的帧索引。随后在图7和8的后续处理中使用该处理集合。
在方框720中,检查帧分层,从处理集合中除去为该集合中任意其它帧的派生物的所有帧索引。该过程包括获取该集合中的每个帧索引,遍历其帧分层内该帧的位置,如同下面参考图8更详细说明的那样。从而,处理集合只包含和集合中的其它帧分层根节点没有任何分层关系的帧分层根节点(“帧分层根节点”可以是整个帧分层中的绝对根节点或者分层中子树的根节点)。
当从图8返回时,方框725检查CRF是否仍在处理集合中。如果是,则意味着该CRF形成帧分层根节点之一,控制转移到方框755,随后从该集合除去该CRF(这是因为根据标准HTTP处理,该CRF将被返回给请求者,从而该帧不需被方框730的逻辑处理)。但是,如果CRF不在处理集合中,则其原始帧之一在该集合中(根据图8的处理)。于是,由于重新加载原始帧会自动重新加载该CRF,因此方框750设置通过利用该帧的空白内容或者极少内容,可优化对客户机浏览器的响应的指示符(如同上面参考图3的方框345说明的那样)。
在方框750或方框755的处理之后,方框745检查处理集合现在是否为空。如果是,则在方框745,控制返回调用逻辑(即图3的方框340)。否则,方框735和730通过除去下一帧索引(方框735),产生被索引帧的帧重新加载信息(这里也称为变化指示符),反复处理该处理集合中的条目。下面描述的图9中的样本语法用于说明实现这种任务的一种方式。控制随后返回方框745,继续处理该处理集合中的条目。
图8中的逻辑开始于方框800,在方框800,该处理的输入是(在图7的方框715中产生的)用于加载的候选帧索引的处理集合和服务器方帧分层。方框810检查该处理集合是否为空。如果是,则控制返回图7中的调用逻辑(方框820)。否则,在方框830继续处理。方框830-890构成“外循环”,方框840-880构成“内循环”。外循环反复处理该集合中的所有元素。内循环随后获取来自外循环的选择,并将其与集合中的所有成员进行比较。这样,把每个成员与其它各个成员进行比较,了解它们是否是另一方的祖先(本领域的普通技术人员会认识到,许多备选方法可用于确定树形结构的根节点。这种嵌套循环技术是这样的一种方法,如果处理集合的大小相对较小,例如约为数十个元素,则嵌套循环技术效果较好)。
通过获得处理集合中的下一帧索引,开始外循环(方框830)。该帧索引被称为“nextFrame”。方框840获得该集合中帧索引中的一个不同帧索引,该索引被称为“candidateFrame”。方框850检查这些索引是否指向相同帧。如果是,则控制返回方框880。否则,方框860检查nextFrame是否是candidateFrame的祖先。如果是,则由于是多余的,因此从处理集合中除去candidateFrame(方框870)(即,nextFrame的索引会导致重新加载其派生帧,于是不必产生派生的candidateFrame的变化指示符)。
方框880检查candidateFrame是否是要与nextFrame比较的最后一个帧索引。如果不是,则通过把控制返回给方框840,再次重复内循环。否则,控制转移给方框890,方框890检查nextFrame是否是外循环的处理集合中的最后一个帧索引。如果检查结果为否,则控制返回方框830,继续重复外循环,而如果检查结果为是,则控制返回图7中的调用逻辑(方框820)。
在根据图7和8处理帧索引之后,剩余的是一个数学集合,其中当再次与服务器方逻辑保持的完整帧分层比较时,每个成员不具有与该集合中的其它成员的层次关系。
图9提供了可用于把需要刷新的其它帧/对象通知客户机浏览器的例证语法。这里,该语法也被称为“变化指示符”和“程序脚本代码”,本例中,该语法使用Javascript语言。图9中的例子涉及图10A中描述的样本帧布局。在图10A中,这里称为“samplesTopFrame”的父窗口1000包含两个子帧1010和1020。这里,这两个子帧被称为“samplesToolbarFrame”和“samplesWorkAreaFrame”。第二子帧1020本身具有这里称为“samplesListFrame”和“samplesContentFrame”的两个子帧1030和1040。
假定客户机已请求刷新“samplesToolbarFrame”1010中的工具条。在现有技术中,或者“samplesToolbarFrame”1010会是被刷新的唯一帧,或者在一些特殊情况下,整个父帧1000(包括其所有派生帧,而不考虑这些派生帧是否已变化)会被刷新。另一方面,本发明的选择性刷新方法检查该父帧/原始帧1000内的哪些帧需要被刷新,并且中触发这些帧的刷新。例如,假定“asmplesListFrame”1030中的列表帧和“samplesContentFrame”1040中的内容帧已被应用程序的事务逻辑标记为脏帧。利用本发明,可响应客户机的关于帧1010的请求,有选择地刷新帧1010、1030和1040。许多情况下,和刷新整个父帧/原始帧或者利用逐帧轮询技术的现有方法相比,这种选择性刷新将极大地减少网络通信量。
图10B图解说明了图10A中例证的复帧布局的帧分层表现,其中利用图10A中使用的编号方式标记该帧分层。如前所述,优选实施例使用这种分层树的森林结构有效处理重新加载队列,从而改进了相对于客户机浏览器的传输,并减少了帧闪烁。
图9中的“<script>”标记具有把脚本语言识别为Javascript的“语言”属性。本例中,<script>标记的内容是“reloadFrame”函数的两次调用(参见图11)。这些调用分别导致帧1030和1040的刷新。在优选实施例中,<script>标记本身被嵌入将(响应客户机的关于帧1010的请求)呈递被请求帧1010的标记语法中。
reloadFrame函数的每次调用确定两个参数的数值。第一个参数是需要刷新的帧的路径,识别分层帧布局内(可能嵌入的)帧。在优选实施例中,在Docu ment Object Model(“DOM”)语法中表示该路径。第二参数提供应在该帧内加载的页面的相对或绝对URL。
图9中所示的关于reloadFrame函数的首次调用识别选择的帧1030(“samplesListFrame”),帧1030是帧1020(“samplesWorkAreaFrame)”的子帧,并提供可从其获得修改后的帧内容的地址(“/web-samples/samples/action/t2209db”)。该例子中的DOM语法确定选择的帧嵌套在某一帧内,所述某一帧本身是父帧的子帧。类似地,第二调用识别选择帧1040(“samplesContentFrame”),它也是帧1020(“samplesWorkAreaFrame)”的子帧,并提供可从其获得修改后的帧内容的地址(“/web-samples/samples/action/Tf04dae”)。
图11描述了可用于实现reloadFrame函数的代码,并且对于本领域的普通技术人员来说易于理解。该代码最好被加入(例如链接到)返回给客户机以便呈递客户机的请求帧的HTML标记语法中。从而,当客户机的浏览器在呈现帧1010的同时,处理图9中所示的<script>标记时,图11中的代码将被调用,并且将重新加载每个脏帧1030、1040。
如同已说明的那样,本发明提供刷新/加载复帧显示画面的有利技术。利用这里公开的技术,通过本发明的选择性刷新,有效避免了现有技术的问题,包括陈旧/无效信息的呈递,资源的低效使用以及帧闪烁。本发明的一种实现可被提供成服务器方应用程序代码可用的服务,允许应用程序代码把任意帧标记为脏帧,随后当收到客户机的帧重新加载请求时,在单一响应中处理所有脏帧(即,通过返回请求的内容,以及客户机应请求的其它帧的指示,例如用Javascript编码的脚本)。虽然参考用于文件管理应用程序的复帧Web页说明了优选实施例,不过所公开的技术可和任意复帧客户机显示画面一起使用,或者更一般地说,可和任意分区开窗方案一起使用(从而可独立于其它分区,单独刷新/加载/描绘任意分区)。例子包括多文档界面,或者说“MDI”页;邮件客户程序(例如,独立的各帧被用于邮件文件夹,邮件文本本身,邮件列表,地址簿等);具有导航帧的任意页面;具有书签的任意页面;以及具有页面遍历记录的任意页面。或者,在更一般的意义上,本发明的实现可用作消息服务,借助该消息服务,服务器方代码能够对消息框或其它GUI对象排队,随后通知客户机该GUI对象应被取回。
此外,应注意的是虽然利用客户机-拉出方案描述了优选实施例,不过利用服务器-推入模型也可实现本发明的优点。例如,代替每次收到到来的客户机请求时,评估重新加载队列,备选实施例可利用其它标准(例如服务器的计时器的到期,达到关于在服务器接收的客户机请求的数目的可配置阈值,检测到在服务器发生一个或多个可配置事件等),触发该评估过程,并发送反映目前需要重新加载的各帧的重新加载脚本。
共同转让的(并且同时待审的)美国专利__(序列号09/954951,申请2001年9月18日)“Low-Latency,IncrementalRendering in a Content Framework”公开了可在诸如入口系统提供的入口页面之类内容框架中有效呈递内容的技术。代替等待所有portlet执行并把它们的内容作为集合结果传送给客户机,该共同转让的发明通过其内容已可用的那些portlet的内容,更快速地响应客户机请求;随后,可利用各种公开技术,相对于其它“最近完成的”portlet传送内容。在该共同转让的发明的第三实施例中,利用帧呈递入口页面,于是将呈递当多个portlet的输出时,该页面可被设计成复帧页面(第一和第二实施例不使用帧,第四实施例需要明确的用户操作;从而,这些实施例和本发明的讨论无关)。在第三实施例中,各帧可保持一个portlet(在第一方面)或者多个portlet(在可选的第二方面)的内容。任一情况下,单独的URL和各帧相关,发送给客户机浏览器的帧标记指令浏览器从URL取回将在该帧中呈现的内容。在第三实施例的第一方面中,客户机浏览器发送的每个帧请求保存在入口服务器,直到相应的portlet的内容准备好为止。这不同于本发明的选择性帧刷新技术。在第三实施例的第二方面中,当客户机浏览器发送关于代表一个以上portlet的URL的请求时,入口服务器返回当收到该请求时,处于就绪状态的多个portlet的内容,随后传送该帧的新版本,它包括来自最新完成的portlet的内容。通过在入口服务器的响应中,规定包含某一时间间隔的刷新报头或META标记,可传送所述新版本的帧,在所述某一时间间隔之后,客户机应发送关于相同内容的另一请求。或者,多部分MIME(“多用途因特网邮件扩展”)消息可被用于当最新完成的portlet内容变得可用时,使入口服务器能够主动地把修改后的帧内容直接传送给浏览器。该第二方面也不同于本发明的选择性刷新技术。
如同本领域技术人员会认识到的那样,可以方法、系统或计算机程序产品的形式提供本发明的实施例。因此,本发明可采取全部硬件实施例,全部软件实施例或者组合软件和硬件的实施例的形式。此外,本发明可采取包含在一个或多个计算机可用存储介质(包括(但不限于)磁盘存储器、CD-ROM、光学存储器等)上的计算机程序产品的形式,其中包含有计算机可用程序代码。
已参考根据本发明的实施例的方法,设备(系统)和计算机程序产品的流程图和/或方框图说明了本发明。显然流程图和/或方框图的每个方框,以及流程图和/或方框图中方框的组合可由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机、嵌入式处理器或者其它可编程数据处理设备的处理器,以便产生一种机器,从而指令(通过计算机或其它可编程数据处理设备的处理器执行)产生用于实现在流程图和/或方框图的方框中规定的功能的装置。
这些计算机程序指令也可保存在计算机可读存储器中,计算机可读存储器可指令计算机或其它可编程数据处理设备按照特定方式发挥作用,从而保存在计算机可读存储器中的指令产生包括指令装置的制品,所述指令装置实现在流程图和/或方框图的方框中规定的功能。
计算机程序指令也可被加载到计算机或其它可编程数据处理设备上,导致将在计算机或其它可编程设备上执行的一系列操作步骤产生计算机实现的过程,从而在计算机或其它可编程设备上执行的指令提供实现在流程图和/或方框图方框中规定的功能的步骤。
虽然已说明了本发明的优选实施例,不过一旦本领域的技术人员获悉基本发明原理,那么他们易于想到这些实施例中的其它变化和修改。于是,附加权利要求应被理解为包括优选实施例和落入本发明的精神和范围内的所有这种变化和修改。