客户端侧WEB状态的高效迁移的制作方法

文档序号:11851413阅读:213来源:国知局
客户端侧WEB状态的高效迁移的制作方法与工艺

用户通常经由浏览器与各种服务进行交互。例如,许多用户主要地或者排他地使用支持web的电子邮件应用,而非更传统的桌面电子邮件功能。在另一趋势中,用户现在通常经由多个用户设备与各应用进行交互。例如,用户可使用智能电话、平板型设备、游戏机和/或传统的台式计算设备等在不同时间和在各个不同情境中与同一应用进行交互。在不久的将来,用户还可将可穿戴计算设备添加到它们的常用计算设备的套件。

考虑一种情形,其中用户希望暂停其与第一设备上的特定支持web的应用的交互,并且在稍后时候在第二设备上(或在同一设备上)恢复该交互。当前不存在用于高效且正确地保留用户与第一设备处的应用的交互的状态并且使该状态对第二(或第一)设备可用的功能。一种现有机制允许用户在从第一设备移动到第二设备时保留他的或她的标签选择;但是这一机制不保留用户的会话的内容。另外,数据中心环境通常使用虚拟机技术以使用管理程序等在计算设备之间转移状态。但是由这一技术产生的镜像的大小可以极大。通过诸如无线蜂窝连接之类的普通商业链路发送这样大量的信息是不可行的。



技术实现要素:

在此描述了一种状态迁移模块(SMM),其在用户计算设备之间或者在发生在各个不同时间的与同一设备上的应用的不同交互之间无缝、高效且正确地转移应用状态。SMM通过保留应用的相对于高级程序在浏览器执行环境或相似环境上的执行的当前状态来操作,而非通过将底层计算设备的操作作为整体保留来操作。这一特性减少了描述应用的当前状态所需的信息量。例如,由SMM捕捉的状态不反映与计算设备的硬件或操作系统接口相关联的低层状态。

根据另一例示性方面,SMM可被实现为库模块,其与执行应用的功能的应用代码模块一起从远程实体被接收。执行环境(例如,浏览器)可使用它的原生资源来执行库模块,而不一定要求用户手动地安装特殊程序等(尽管该情形也不被排除)。

根据另一例示性方面,SMM通过部分地利用用来表达应用的语言的内省(introspection)/反射(reflective)能力来捕捉当前应用状态的特征。

根据另一例示性方面,SMM捕捉丰富描述性的状态信息。例如,SMM可以捕捉描述存储在堆存储器中的信息(包括环境定义的对象和函数,以及应用定义的对象和函数)的特征、描述与应用相关联的DOM树的特征、描述由应用登记的定时器的特征、描述进行中的网络连接的特征、描述由应用存储在本地数据存储库中的信息的特征,等等。

根据另一例示性方面,SMM可以诸如通过静态地重写闭包并且使用征收(imposition)或者其他技术监视应用创建和移除定时器、事件处理器等的方式来施加用来使应用状态显露的特殊规定。

根据另一例示性方面,SMM可以利用附加规定来提高状态迁移的效率。在一种情况下,应用开发者可向应用的特征添加标签;SMM然后基于这些标签以特定方式处理特征。例如,一种类型的标签可指令SMM异步地恢复与关联的特征相关联的状态。

在被设计用来提高迁移效率的另一规定中,SMM可在应用的暂停之前基于增量来存储状态信息。

上面的方式可以被体现在各种类型的系统、设备、组件,方法、计算机可读介质、数据结构、图形用户界面展示、制品等中。

提供本发明内容是为了以简化的形式介绍概念的选集;这些概念在以下具体实施方式中被进一步描述。本发明内容并不旨在标识所要求保护的主题内容的关键特征或必要特征,也不旨在用来限制所要求保护的主题内容的范围。

附图说明

图1示出了在两个计算设备之间或者在各个不同时间使用同一设备的两个交互之间无缝且正确地转移应用的状态的环境。

图2示出了一种向计算设备递送状态迁移模块(SMM)的方式。SMM是图1的环境的组件。

图3示出了图2的实现方式的扩展,从而解决其中应用包括与相应框架相关联的两个或更多个应用模块的情况。

图4示出了在图1中使用的SMM的一种实现方式。SMM包括用于捕捉当前状态的状态捕捉模块,以及用于基于先前状态来恢复应用的状态恢复模块。

图5示出了提供图4的状态恢复模块的一种操作方式的概览的过程。

图6示出了提供图4的状态恢复模块的一种操作方式的概览的过程。

图7示出了用户界面展示的片段,从而描绘可用来明确暂停应用并存储该应用的当前状态的可选控制机构。

图8示出了由图4的状态捕捉模块产生的当前状态镜像的概览。

图9和图10一起示出了根据一种例示性实现方式的另一更详细的当前状态镜像。

图11表示由计算设备提供的堆存储器的一部分。堆存储器包含由应用在执行期间产生的程序特征。

图12图示了(图4的)状态捕捉模块可通过其静态地重写代码以便使闭包变量显式的方式。

图13图示了(图4的)状态捕捉模块可通过其监视应用创建和移除定时器、事件处理器等的方式。

图14示出了(图4的)状态捕捉模块可用来表达基于间隔的定时器的状态的定时信息。

图15示出了涉及不管从第一计算设备到第二计算设备的应用状态的迁移而使用代理以将稳定端点显露给应用服务器的策略。

图16和图17共同示出了以与图5的过程相比更多例示性细节的方式表示状态捕捉模块的操作的过程。

图18示出了以与图6的过程相比更多例示性细节的方式表示状态恢复模块的操作的过程。

图19图示了用于基于由应用开发者向应用的特征添加的标签而以不同方式迁移状态信息的策略。

图20图示了(图4的)状态恢复模块可通过其基于在图19中标识的标签来恢复应用的状态的方式。

图21一示例如用于使用具有相等大小的更新分段来递增地存储当前状态信息的策略。

图22示出了图21的策略的变体。

图23是从(图4的)状态捕捉模块的角度描述(图19和图20的)加标签策略的操作的过程。

图24和图25是从(图4的)状态恢复模块的角度描述(图19和图20的)加标签策略的操作的过程。

图26是从(图4的)状态捕捉模块的角度描述(图21和图22的)增量更新操作的操作的过程。

图27示出了可用来实现在前述附图中示出的特征的任何方面的例示性计算功能。

相同的数字在整个公开内容和附图中用来引用相似的组件和特征。100系列数字指代原来在图1中找到的特征,200系列数字指代原来在图2中找到的特征,300系列数字指代原来在图3中找到的特征,诸如此类。

具体实施方式

本公开内容按如下被组织。章节A提供了用于迁移应用状态的环境的概览。该环境利用在计算设备上运行的状态迁移模块(SMM)的实例。章节B描述作为每个SMM的组件的状态捕捉模块的操作。章节C描述作为SMM的另一组件的状态恢复模块的操作。章节D描述被设计用来提高状态被迁移的效率的各种机制。章节E描述可用来实施在前述章节中描述的特征的任何方面的例示性计算功能。

作为引文,一些附图在被不同地称为功能、模块、特征、要素等的一个或多个结构组件的情境中描述概念。附图中示出的各组件可以通过任何物理和有形机构(例如,通过在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合)用各种方式被实现。在一种情况下,附图中所图示的将各种组件分离为不同的单元可以反映在实际实现方式中使用对应的不同的物理和有形组件。备选地或附加地,附图中所图示的任何单个组件都可以通过多个实际物理组件被实现。备选地或附加地,对附图中的任何两个或更多个单独的组件的描绘可以反映由单个实际物理组件执行的不同的功能。将转而被描述的图27提供了关于附图中所示出的功能的一种例示性物理实现方式的附加细节。

其他附图以流程图形式描述了概念。以这一形式,某些操作被描述为构成按某一顺序执行的不同的框。这样的实现方式是例示性的而非限制性的。在此描述的某些框可被分组在一起并在单个操作中被执行,某些框可被分成多个组件框,并且某些框可以按与在此图示出的顺序不同的顺序被执行(包括以并行方式执行这些框)。在流程图中图示的各个框可以通过任何物理和有形机构(例如,通过在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合)用任何方式被实现。

关于术语,短语“被配置为”包含任何种类的物理和有形的功能可以被构建以执行标识的操作的任何方式。功能可以被配置为使用例如正在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来执行操作。

术语“逻辑”包含用于执行任务的任何物理和有形的功能。例如,在流程图中图示的每个操作对应于用于执行该操作的逻辑组件。可以使用例如正在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来执行操作。在由计算设备实现时,逻辑组件表示作为计算系统的物理部分的、无论如何实现的电子组件。

以下说明可以将一个或多个特征标识为“可选”。这种类型的陈述不应该被解释为可以被视为可选的特征的穷尽的指示;也就是说,其他特征也可以被视为可选,虽然在文本中没有明确地标识。另外,任何对单个实体的描述并非旨在排除对多个这样实体的使用;类似地,对多个实体的描述并非旨在排除对单个实体的使用。最后,术语“示例性”或“例示性”指的是可能的许多实现方式中的一种实现方式。

A.迁移框架的概览

图1示出了环境102,其中第一计算设备104捕捉应用的第一实例106的当前状态。第二计算设备108在稍后时候从如由第一计算设备104捕捉的当前状态定义的接合点(juncture)开始恢复与同一应用的另一实例110的交互。在一种情形中,第一计算设备104与第二计算设备108不同。在另一种情形中,第一计算设备104与第二计算设备108相同。但是为了简化以下说明,以下描述将强调第一种情况,其中第一计算设备104与第二计算设备108不同。

第一和第二计算设备(104,108)可对应于执行计算功能的用户设备。计算设备(104,108)例如可被从任何以下各项选择:台式计算设备、游戏机、机顶盒设备、膝上型计算设备、上网本型计算设备、平板型计算设备、智能电话或其他蜂窝电话设备、个人数字助理设备、音乐播放设备、电子书阅读器设备、便携式电玩(game-playing)设备、可穿戴计算设备、智能家电设备等。在下文中,将假定同一用户在各个不同时间与第一计算设备104和第二计算设备108交互。但是并不需要是这种情况;例如,一个人可暂停她与第一计算设备104上的应用的交互并且然后指令另一个人恢复与第二计算设备108上的同一应用的交互。另外,可以基于由第一计算设备104捕捉的状态在两个或更多个计算设备上恢复应用的实例。

第一计算设备104使用第一执行(即,运行时)环境112以运行应用,而第二计算设备108使用第二执行(即,运行时)环境114以运行应用。执行环境(112,114)可对应于安装在相应计算设备(104,108)上的浏览器。在另一种情况下,执行环境(112,114)中的一个或多个可对应于被设计用来运行支持web的应用的任何功能,其中该功能并不对应于浏览器本身。例如,执行环境(112,114)中的一个或多个可对应于独立的解释器。

在一种实现方式中,第一执行环境112使用与第二执行环境114相同类型的平台。例如,两个执行环境(112,114)均可对应于由华盛顿州雷德蒙市的微软公司提供的Internet(IE)浏览器。在另一种情况下,第一执行环境112与第二执行环境114不同;例如,第二执行环境114可对应于浏览器,而第一执行环境112可对应于微软的IE浏览器。

图1还示出了两个计算设备(104,108)均从远程应用源116取回应用的实例。远程应用源116可对应于远程服务器,或者远程服务器的集合。每个计算设备可通过指定与远程应用源116相关联的网络地址(例如,统一资源定位符)来访问远程应用源116。更一般而言,计算设备(104,108)可以从任何源或者源的组合获得与应用相关联的代码,任何源或者源的组合中的任一个关于计算设备(104,108)可以是本地的或是远程的。

在一种情况下,应用源可提供与单个特定应用相关联的代码。因此,在该情况下,计算设备(104,108)将与不同的应用源交互以运行各个不同应用。在另一情况下,应用源可提供与两个或更多个应用相关联的代码。

在在此强调的示例中,应用对应于被通俗地称为web应用之物。web应用可提供执行任何任务(诸如通过发送和接收电子邮件等)的任何功能。备选地,web应用可用作递送信息的主要目的(诸如通过显示博客条目等)。在许多情况下,web应用可被实现为超文本标记语言(HTML)资源、样式表资源(诸如层叠样式表资源)和行为执行资源(诸如资源)的集合。浏览器从诸如远程应用源116之类的任何一个或多个应用源下载这些资源。用户然后经由执行环境(例如,浏览器)与应用交互。但是,更一般而言,应用可对应于被设计用来在任何高级执行环境(诸如浏览器)内执行的任何程序。

第一执行环境112还包括(或者以其他方式可以访问)状态迁移模块(SMM)的第一实例118,而第二执行环境114包括(或者以其他方式可以访问)SMM的第二实例120。暂时跳过附图的顺序,图4是SMM 402的高级逻辑描绘。SMM 402实现两个基本功能;其却居于其被调用在其中的情境在给定时间执行这些功能之一。状态捕捉模块404通过在指定时间捕捉应用的当前状态来执行第一功能。在这里呈现的大多数示例中,指定时间对应于用户例如通过导航离开该应用、关闭浏览器等而暂停他或她与应用的交互的时间。在其他情况下,用户可明确地指令状态捕捉模块404存储应用的当前状态,但是用户可继续与应用交互。在任何情况下,状态捕捉模块404将当前状态表达为当前状态镜像,并且将当前状态镜像存储在目的地数据存储库406中。

状态恢复模块408通过从目的地数据存储库406取回先前状态镜像来执行第二功能。先前状态镜像对应于由状态捕捉模块404在某一更早时间创建的当前状态镜像。状态恢复模块408然后将应用恢复到由先前状态镜像表达的状态。

返回到图1,SMM 402的第一实例118调用它的状态捕捉模块404以存储应用的当前状态。这一操作产生当前状态镜像122,其反映应用在时间t0的状态。SMM 402的第一实例118可将当前状态镜像122存储在本地数据存储库124中、或将当前状态镜像122存储在远程数据存储库126中,或将当前状态镜像122存储在本地数据存储库124和远程数据存储库126两者中。迁移管理模块(MMM)128可管理远程数据存储库126中的状态信息的存储和取回以及其他管理功能。在一种情况下,MMM 128和远程数据存储库126被与特定应用相关联的实体管理。在另一情况下,MMM 128和远程数据存储库126提供用于由多个应用或所有应用使用的服务。

在比t0更晚的时间t1处,SMM 402的第二实例120调用它的状态恢复模块408。更具体而言,假定第二计算设备108不同于第一计算设备104。在该情况下,SMM 402的第二实例120可从远程数据存储库126取回当前状态镜像122。备选地,假定第二计算设备108与第一计算设备104相同。在该情况下,SMM 402的第二实例120可从本地数据存储库130取回当前状态镜像,顺带提及,本地数据存储库130与本地数据存储库124相同。备选地,SMM 402的第二实例120可从远程数据存储库126取回当前状态镜像122,如果其已被存储在那里的话。例如,在一些同设备恢复的情形中,应用提供者和/或用户由于许多原因(例如,基于远程数据存储库126与本地数据存储库124相比更安全并且/或者免于损坏的看法)而可能更喜欢将当前状态镜像122存储在远程数据存储库126中(并且稍后从其取回)。在其他环境中,应用提供者和/或用户可能得出相反结论,从而因此更喜欢将当前状态镜像122存储在本地数据存储库124中。(重申,然而,为了不不适当地使以下说明复杂化,此后将主要假定第二计算设备108与第一计算设备104不同,在这种情况下SMM 402的第二实例120将从远程数据存储库126取回当前状态镜像122)。SMM 402的第二实例120然后可使用它的状态恢复模块408以基于由当前状态镜像122(其现在可被称为先前状态镜像)传授的状态信息来将应用恢复到它的暂停状态。用户然后可使用第二计算设备108继续与应用交互。

从用户体验的视角,用户将感知到应用在其在第一计算设备104处被中断的相同接合点处在第二计算设备108处恢复。例如,如果用户正在玩游戏,由游戏呈现的动作、游戏的分数状态以及游戏的状态的所有其他方面将从游戏在第一计算设备104处曾被暂停处的接合点起恢复。

一个或多个网络132将上述组件通信地耦合在一起。一个或多个网络132可对应于局域网、广域网(例如,因特网)、点对点连接等或这些的任何组合。

最后,图1用数字来注释环境102内的某些路径,从而反映操作的例示性且非限制性的顺序。其他实现方式可诸如通过省略一个或多个指定步骤和/或添加一个或多个新步骤、改变一个或多个指定步骤的次序等来改变所图示的操作顺序的一个或多个方面。

在第一操作(1)中,第一计算设备104从远程应用源116接收应用的第一实例106。如不久将被阐明的,SMM 402的第一实例118可被与应用的第一实例106一起接收作为库模块。因此,在这一情形中,执行环境112作为第一操作(1)的结果而接收与应用的第一实例一起的SMM的第一实例118。在另一实现方式中,SMM 402的第一实例表示例如与第一执行环境112的稳定资源对应的第一执行环境112的已经存在的组件。

更具体而言,在操作(1)中,第一执行环境112可向应用源116请求期望的应用。环境102内的某一实体然后可确定关于考虑中的特定应用以及关于考虑中的特定用户是否存在先前状态镜像。在这里假定不存在这样的先前状态镜像。如果是这样,则应用源116可以在不参考先前状态的情况下递送应用。执行上述状态检查操作的实体可对应于应用源116、MMM 128、第一执行环境112等或这些的任何组合。

在操作(2)中,SMM 402的第一实例118捕捉时间t0处的当前状态。时间t0可对应于用户已经暂停应用的操作的时间点。SMM 402然后将对应的当前状态镜像122存储在远程数据存储库126中,和/或根据操作(2')存储在本地数据存储库124中。

作为操作(2)的一部分,SMM 402还可存储指示当前状态镜像122现在存在的信息。例如,SMM 402可将标识对应的当前状态镜像122的存在的cookie等存储在第一计算设备104的本地数据存储库124中。附加地或者备选地,SMM 402可在应用源116处和/或在MMM128处存储指示(针对特定应用,以及针对特定用户的)当前状态镜像122的存在的条目。状态检查操作可稍后参考上述信息以确定针对特定应用并且针对考虑中的特定用户的当前状态镜像122的存在或者不存在。

在操作(3)中,第二计算设备108的第二执行环境114发起应用的第二示例110的复活(resurrection)。例如,响应于用户对应用的调用,第二执行环境114可向应用源116请求应用。环境102内的某一实体(例如,应用源116、MMM 128、第二执行环境114等)然后可执行上述的相同状态检查操作。例如,应用源116可基于存储在第二计算设备108上的本地cookie和/或基于由应用源116和/或MMM128保持的远程存储的信息等来做出这一确定。在这一情形中,应用源116将确定当前状态镜像122存在(其在此时可被视为先前状态镜像)。

在操作(4)中,第二执行环境114基于当前状态镜像122来启动应用,而非在不参考先前状态的情况下重新启动应用。第二执行环境114可以按照不同方式执行以上任务。不带限制地,在一种非限制性方式中,应用源116可将应用存根(stub)递送给第二执行环境114,或者以其他方式使应用存根对第二执行环境114可用。第二执行环境114可首先使用由应用存根提供的信息来对SMM 120的第二实例120实例化。备选地,如上所述,第二执行环境114可能已经包含SMM 402的第二实例120作为稳定资源。应用存根还可提供允许SMM 402的第二实例120访问当前状态镜像122的信息。例如,应用存根可包含指向当前状态镜像122的指针。SMM 402的第二实例120可使用该指针来从远程数据存储库126和/或本地数据存储库130取回当前状态镜像122。在另一情况下,应用存根可自身包含当前状态镜像122的副本。无论用何种方式被获得,SMM 402的第二实例120然后基于当前状态镜像122来恢复应用的状态。

从高级立场,图1中使用的SMM 402关于应用在执行环境(诸如执行环境(112,114))中的执行而非关于由应用所运行于的底层计算设备执行的所有功能的操作来捕捉和恢复应用的状态。例如,SMM 402在不考虑执行环境与计算设备的底层操作系统和核心硬件资源交互的方式的底层细节的情况下捕捉和恢复应用的状态。因此,SMM 402在与由运行SMM 402的计算设备提供的硬件或操作系统接口相比更高层次的抽象上操作。

SMM 402可通过利用高级执行环境的隔离相关的特性来表达与高级执行环境的操作有关的应用的状态。例如,考虑如下具体示例:其中执行环境对应于主要被设计用来运行web应用的浏览器。现代浏览器通常将不会给与应用对底层计算设备的核心资源的无阻碍的访问,至少不以与允许传统应用经由操作系统与资源交互的方式相同的方式。换言之,为了提升安全性和其他目的,浏览器在与以传统方式在计算设备上运行的应用相比更受限制的信任域中操作。SMM 402利用由浏览器提供的隔离以如应用向浏览器而非整个底层计算设备显现那样定义应用的基线状态。例如,如由SMM 402捕捉的当前状态不考虑浏览器自身如何与底层计算设备的操作系统交互。

许多益处可随着SMM 402的以上特性而产生。例如,与描述底层计算设备的整体操作的状态相比,当前状态镜像122可具有小得多的大小。例如,与由传统虚拟机机制产生的镜像相比,当前状态镜像122可具有小得多的大小。第二,作为有关益处,SMM 402可以与由传统虚拟机机制产生的大得多的镜像相比,按照更高效地方式创建、转移和恢复当前状态镜像122。例如,计算设备可以通过许多类型的商业通信链路(诸如蜂窝链路)来快速地传输当前状态镜像122;对于由传统虚拟机机制产生的镜像,这么做将是不可能的。第三,当前状态镜像122与由传统虚拟机机制产生的镜像相比更不复杂。因为更不复杂,所述当前状态镜像122可以更不易于错误地表示应用的状态,例如,由于未能考虑到影响应用的恢复的依赖关系。

最后,SMM 402可被实现为以与任何其他库模块相同的方式在执行环境(例如,浏览器)上运行的代码。这一特性促进了SMM 402的部署和管理。相比之下,传统的虚拟机机制使用管理程序(等)来恰当地捕捉底层计算设备的状态。另外,在一些实现方式中,环境102可以在不要求用户执行对执行环境的手动修改的情况下部署SMM402。然而,如上所述,在其他情况下,SMM 402可表示例如通过向执行环境添加新模块而产生的执行环境的稳定资源。

以上潜在益处以示例而非限制的方式被引证;SMM 402可提供未在上面提到的附加益处。

图2图示了一个实施例,其中SMM 402对应于SMM库模块202,例如,对应于被组织为一个或多个代码单元的实现SMM 402的代码。执行环境运行SMM库模块202以产生SMM 402的实例化。应用自身的功能由应用代码模块204实现。执行环境运行应用代码模块204以产生应用的实例。SMM库模块202和应用代码模块204共同对应于应用相关的代码206。

在一种情况下,应用源116可提供SMM库模块202和应用代码模块204两者。在另一情况下,迁移管理模块(MMM)128可提供SMM库模块202,并且应用源116可提供应用代码模块204。在另一情况下,MMM 128可将SMM库模块202提供给应用源116,应用源116转而将其提供给执行环境,诸如此类。

在一种情况下,至少一个源将SMM库模块202和应用代码模块204作为单个包提供给执行环境。在另一情况下,任何源将SMM库模块202提供给执行环境,并且然后同一源或者不同源将应用代码模块204提供给执行环境,或者反之亦然。

以上阐明的原理在不同的技术环境中可以不同方式被实现。在图1的一种例示性且非限制性的实现方式中,假定执行环境(112,114)是浏览器。在该情况下,应用可由与单个起源相关联的代码的单个模块实现。应用定义的代码可位于单个HTML框架内。SMM模块402可由也在该框架中运行的库表示,并且可被从与应用定义的代码相同的源或者不同源获得。备选地,如在上面提到的,SMM模块402可由浏览器自身实现。一般而言,框架对应于代码所运行于的执行情境,并且此后被以该一般意义提及。

在另一情况下,应用可对应于与不同域相关联的应用代码模块的集合体(conglomerate)。执行环境可使用各个不同的框架来运行不同的代码模块。例如,考虑应用对应于web应用的情况。该应用使由不同代码模块实现的两个或更多个单独服务聚集在一起。不同的代码模块可源自一个或多个各个不同的应用源,或者至少部分地源自同一应用源。例如,“主要”应用代码模块可向用户递送社交网络服务。用户可经由该应用提供的用户界面呈现的主要部分与该服务交互。第二应用代码模块可向用户递送广告。用户可经由用户界面呈现的周围区域与该补充服务交互。

图3示出了经由三个应用代码模块(302,304,306)将用户体验提供给用户的应用的实现方式。执行环境(在这一示例中为浏览器)在三个相应的框架(框架1,框架2,和框架3)中运行三个应用代码模块(302,304,306)。每个框架构成具有独立于其他框架的状态的状态。因此,SMM 402通过分离地捕捉每个独立框架的状态来捕捉这一种类的应用的状态。对三个应用代码模块(302,304,306)和关联的框架的使用仅仅是代表性的;应用可包括任何数目的应用代码模块。

为了特定于框架地捕捉状态,环境102可以使第一SMM库模块308与第一应用代码模块302相关联、使第二SMM库模块310与第二应用代码模块304相关联以及使第三SMM库模块312与第三应用代码模块306相关联。应用代码模块(302,304,306)和SMM库模块(308,310,312)的集合共同对应于应用相关的代码314。可以按照以上关于图2的单框架示例规定的任何方式将每个库模块提供给执行环境。

每个SMM库模块使负责捕捉和恢复与特定应用代码模块相关联的状态的SMM的版本实例化。也就是说,第一SMM库模块308捕捉和存储关于第一应用代码模块302的状态信息,第二SMM库模块310捕捉和存储关于第二应用代码模块304的状态信息,并且第三SMM库模块312捕捉和存储关于第三应用代码模块305的状态信息。另外,SMM库模块308可用作用于整个应用的SMM 402的顶层实例。当被调用时,顶层SMM库模块308关于应用代码模块302执行它的SMM相关的功能,并且还可指令其他SMM库模块(310,312)关于它们的相应的应用代码模块(304,306)执行它们的SMM相关的功能。但是所有的库模块(308,310,312)以其他方式以独立方式执行它们的操作(因为框架的状态是自身独立的)。

为了简化以下说明,剩余描述将假定应用由与单个框架相关联的单个应用模块组成(换言之,单个执行情境)。但是下面提出的相同处理操作可以被关于应用的多个框架的多个库模块复制。作为另一简化假设,本描述将考虑每个框架是单线程的情形,从而意味着在任何给定时间只有一个调用链是活动的(从而使得多个线程并不并行地改变应用的状态)。

在这一介绍章节的最后,图5示出了对SMM 402的状态捕捉模块404的操作进行概述的过程502。在方框504中,状态捕捉模块404标识与应用相关联的当前状态。在一种情况下,方框502由用户用来关闭应用的决定(例如,通过导航离开支持web的应用(例如,通过关闭被指派给该应用的标签),或者通过关闭整个浏览器)触发。在另一情况下,用户可明确地指令状态捕捉模块404以捕捉应用的状态。例如,在图7的情形中,由应用提供的用户界面呈现702呈现暂停控制按钮704等。用户可激活该控制按钮704以指令状态捕捉模块404标识当前状态。该指令可以与关闭整个应用的指令一致或者可以不与其一致。

在方框506中,状态捕捉模块404将标识的状态表达为当前阶段镜像。在方框508中,状态捕捉模块404将当前状态镜像存储在诸如本地数据存储库124和/或远程数据存储库126之类的至少一个目的地数据存储库中。状态捕捉模块404还在本地和/或远程地存储当前状态镜像已被创建的指示。章节B提供了关于状态捕捉模块404的操作的更多例示性细节。

图6示出了过程602,其概述了环境102可恢复应用的状态的方式。在方框604中,调用应用的请求被接收(例如,被应用源116)。在方框606中,环境102内的某一实体(诸如应用源116)确定针对应用先前状态镜像是否存在。该实体可以按照上述的不同方式检测先前状态镜像的存在。

在方框608中,第二执行环境114取回先前状态镜像,无论其被存储在何处。第二执行环境114可以按照上述的不同方式执行这一操作。在一种方法中,第二执行环境114从应用源116接收应用存根,这允许其使状态恢复模块408实例化。状态恢复模块408然后使用由应用存根提供的信息以取回先前状态镜像。在方框610中,状态恢复模块408使用先前状态镜像恢复如由状态捕捉模块404捕捉的应用的状态。用户然后可从应用被暂停处的同一接合点恢复应用的操作。章节C提供了关于状态恢复模块408的操作的更多例示性细节。

B.状态捕捉模块

图8示出了在章节A中介绍的当前状态镜像122的一种实现方式。当前状态镜像122表达了应用在该应用被暂停时的状态,或者应用在状态捕捉指令以其他方式被接收到时的状态。

当前状态镜像122可包括存储关于应用的不同方面的信息的不同部分。关于术语,应用的特定方面在此被称为应用的特征。描述该特征的状态信息的实例被称为元素或者状态元素。状态捕捉模块404关于应用的每个特征执行两个基本任务。第一,状态捕捉模块404使用某一技术以用于检测它的存在和状态。第二,状态捕捉模块404使用某一技术以表达该状态。

为了有助于说明,以下说明将给出其中应用是用编写的详细示例。是作为许多支持web的应用中的共同特征的面向对象的脚本语言。然而,SMM 402可以对以诸如语言之类的其他语言表达的其他类型的程序操作。和两者均具有在应用的执行期间发现应用的对象的属性的能力。语言的该能力被称为内省或反射(其中反射意味着用于修改被发现的对象的属性的进一步能力)。SMM 402可以按照下述方式利用编程语言的内省/反射能力。

首先,当前状态镜像122可包括描述堆相关的特征的堆相关的状态信息802。如在图11中示出的,堆存储器1102指的是计算设备的主存储器的在应用的执行期间被分配用于存储由应用调用的特征的一部分。也就是说,堆存储器1102中的特征对应于由应用的代码定义的特征的实例化。堆存储器1102中的每个特征可具有一组属性。每个特征还可具有与一个或多个其他特征的关系;堆存储器1102可通过将特征表达为图结构内的节点来表示两个或更多个特征之间的关系。在操作中,加载过程当在应用的执行期间需要特征时将特征存储在堆存储器1102中。垃圾回收过程可周期性地移除不再被应用使用的特征。

在的特殊且非限制性的情况下,特征可包括从原型函数对象得到的函数对象(在下面为了简洁而被简称为“函数”)以及从原型非函数对象得到的非函数对象(在下面为了简洁而被简称为“对象”)。更具体而言,对象和函数的子集可由应用自身定义,并且因此在下面被称为应用定义的对象和应用定义的函数。对象和函数的另一子集由运行应用的执行环境(例如,浏览器)定义的,并且因此在下面被称为环境定义的对象和环境定义的函数。执行环境和应用还可定义“原语”值,诸如数字和布尔值。因此,堆存储器1102除可包含函数值和对象值之外还可包含原语值。

更具体而言,考虑堆存储器1102在应用执行之前的状态。堆存储器1102将仅包含环境定义的特征1104。环境定义的特征1104对应于任何应用可用来提供它的服务的共同资源。例如,一些环境定义的特征可提供允许应用与远程实体交互的功能等。环境定义的特征1104在实际应用中可对应于标识相应资源的路径,而非资源本身。

随后,当应用执行并需要使用应用定义的特征1106时,应用将这些特征加载到堆存储器1102中。应用定义的特征1106对应于正在运行的应用所特有的对象和函数。应用定义的特征中的一些可引用环境定义的特征,如由图11中示出的引用1108所反映的。

回到图8,堆相关的元素的第一集合可描述环境定义的对象和函数。堆相关的元素的第二集合可描述应用定义的对象和函数。如将在下面描述的,与应用定义的特征相比,状态捕捉模块404可使用不同的技术以标识和表达环境定义的特征。

如在上面提到的,环境定义的特征反映可被任何应用使用的功能,并且因而跨不同浏览器是共用的。因此,当捕捉应用自身的状态时,可能似乎可以省略这一信息。然而,应用可能以不同方式影响环境定义的特征。例如,应用可以向环境定义的特征添加功能,和/或修改环境定义特征的图等。应用定义的对象也可指代一个或多个环境定义的对象。状态捕捉模块404捕捉环境定义的特征的状态以便检测以上类型的特定于应用的引用和修改;否则,状态恢复模块408在正确地恢复应用的状态时可能是不成功的。

在一种情形中,捕捉阶段执行环境(例如,图1中示出的第一执行环境112)可能与恢复阶段执行环境(例如,图1的第二执行环境114)相同。例如,两个执行环境(112,114)均可对应于由微软公司提供的IE浏览器。在另一情况中,环境(112,114)可以不同。在后者的情况中,在恢复时,状态恢复模块408可以附加地转换在当前状态镜像122中表达的环境定义的特征以使得它们与由目标执行环境使用的无论什么原生功能兼容。

继续对图8的说明,当前状态镜像122还包括文档相关的状态信息804、定时器相关的状态信息806、网络相关的状态信息808以及存储相关的状态信息810。关于文档相关的状态信息,浏览器可使用文档对象模型(DOM)来表达应用的标记语言信息(例如,它的HTML)。文档相关的状态信息804描述与DOM树相关联的特征。DOM树转而将应用的标记代码表示为节点的结构化集合。定时器相关的状态信息806提供描述已被应用登记的定时器的元数据。网络相关的状态信息808描述涉及应用的进行中的网络交互。并且存储相关的状态信息描述已被应用存储在运行应用的计算设备的本地存储设备上的信息。这样的信息可包括cookie、经由DOM存储接口存储的键/值数据等。上述类型的状态信息以示例而非限制的方式被引用。其他实现方式可以提供附加类型的状态信息。备选地或者附加地,其他实现方式可以省略上述的一个或多个类型的状态信息。

下面将参考在图9和图10中示出的当前状态镜像902的具体示例来更详细地描述上述类别的状态信息。还假定当前状态镜像902表达用编写的应用的状态。然而,重申,本文中所陈述的原理扩展到其他编程语言(诸如但不限于等)。

环境定义的特征。状态捕捉模块404遍历堆存储器1102以标识包括环境定义的对象和环境定义的函数的环境定义的特征(例如,使用图搜索,诸如广度优先搜索)。状态捕捉模块404为每个这样的特征指派并且存储唯一标识符。状态捕捉模块404可将环境定义的特征的值表达为与引用环境定义的对象的路径对应的字符串。图9示出了当前状态镜像902包括用于存储关于环境定义的对象的信息的部分904和用于存储关于环境定义的函数的信息的部分906。例如,环境定义的对象“window.localStorage”对应于表达与这一对象相关联的路径的字符串。

应用定义的对象。状态捕捉模块404利用(或者用来表达应用的任何其他语言)的内省/反射能力以标识应用定义的对象。更具体而言,状态捕捉模块404对堆存储器1102中的包含应用定义的对象的图执行图搜索(例如,广度优先搜索)以标识应用定义的对象和它们的属性。在发现对象之后,状态捕捉模块404向其指派唯一ID。如果状态捕捉模块404在其对在堆存储器1102中提供的信息的遍历中再一次发现相同对象,则它将忽略该对象(因为它已经向该对象指派了唯一ID)。

在一些情况下,一个对象可以引用另一个。例如,一个应用定义的对象可具有引用另一对象Z的属性X.Y。为了解决这一情况,状态捕捉模块404可以表示当前状态镜像902中的对象之间的联系。例如,假定对象No.753通过属性c引用对象No.752。当前状态镜像902提供引用908,其例如通过与属性c相关联地存储对象No.752的ID来记忆这些对象之间的关系。

在一种实现方式中,状态捕捉模块404使用JSON格式来以序列化形式表达应用定义的对象。JSON标准在RFC 4627和ECMA-404中被描述。然而,JSON未提供用于使原生对象和函数序列化的技术。因此,状态捕捉模块404使用定制技术来表达这些特征,如下所述。

总体上,当前状态镜像902包括存储应用定义的对象的部分910以及存储应用定义的函数的部分912。地图914描述与当前状态相关联的所有对象,包括环境定义的对象和应用定义的对象。地图916描述与当前状态相关联的所有函数,包括环境定义的函数和应用定义的函数。头部信息918描述部分910和912的起点。

应用定义的原生对象。原生对象指的是作为由编程语言库提供的原生功能的实例化的应用定义的对象。例如,一个原生对象可对应于RegExp对象,其表示由提供的正则表达式功能的实例化。状态捕捉模块404可以使用不同的特定于类的变换器(transducer)来表达这些类型的对象。例如,考虑基于由编程语言提供的原生功能以表达日期的原生对象。状态捕捉模块404可以将这一对象转换为整数,该整数表示从基准时间开始已经发生的秒数。

应用定义的函数。状态捕捉模块404可以使用的预先定义的toString()方法以标识与应用定义的函数相关联的源代码。状态捕捉模块404然后可以利用语言的内省/反射能力以标识应用定义的函数的属性。例如,在当前状态镜像902的部分912中,注意到第一应用定义的函数被指派ID No.362。该函数具有与变量“i”相关联的整数属性。如由虚线所指示,当前状态镜像902中的许多其他状态元素引用了应用定义的函数No.362。

然而,状态捕捉模块404无法自己使用以上技术以发现与闭包状态相关联的函数。更具体而言,考虑图12中示出的情形,其中内函数1202被嵌入或嵌套在外函数1204中。另外假定内函数1202引用由外函数1204定义的变量(例如,变量X)。嵌套的内函数1202是闭包的示例。外函数1204建立与闭包相关联的闭包创建范围。状态捕捉模块404使用上述toString()方法无法发现闭包关系;更具体而言,该方法将仅返回内函数的源代码。

为了解决以上问题,状态捕捉模块404可以首先标识例如与在图12中示出的函数的嵌套关系对应的闭包创建范围。状态捕捉模块404然后可以静态地重写图12中示出的代码,以按照使闭包变量显式的方式产生新的内函数1202'和新的外函数1204'。更具体而言,状态捕捉模块404可以创建显式对象1206,其具有表示闭包变量的属性。状态捕捉模块404按照其被强迫通过新的显式闭包对象1206访问闭包状态的方式来重写嵌套的内函数1202'。更具体而言,状态捕捉模块404可将显式对象1206指派为嵌套的内函数1202'的函数属性。利用上述改变,状态捕捉模块404现在能够恰当地发现和表达与内函数1202'和外函数1204'相关联的闭包关系。

DOM树特征。如上所述,浏览器可使用由节点的结构构成的DOM树以表达应用的组成代码(makeup code),诸如它的HTML元素。每个这样的节点具有描述节点的特性的属性,诸如它的CSS式样、它的父代(如有的话)、它的子代(如有的话)等。另外,应用可使事件处理器与DOM树中的任何节点相关联。例如,应用可使事件处理器关联于指向特定DOM节点的检测键盘或鼠标输入事件。再另外,应用可例如通过向节点指派定制的“<canvas>”属性来使定制属性与任何DOM节点相关联。

状态捕捉模块404可以向每个DOM节点指派唯一的ID。另外,状态捕捉模块404可以使用现有功能(例如,由流行的浏览器提供的现有XML序列化器接口)将每个DOM节点转换为HTML,以及将该HTML作为用于DOM节点的状态元素存储在当前状态镜像902的部分920中。但是,XML序列化器功能不捕捉事件处理器以及与节点相关联的其他定制属性的存在。

暂时前进到图13,首先考虑由事件处理器呈现的挑战。假定浏览器提供登记事件处理器的原始功能1302。使用内省技术,状态捕捉模块404可以提供监视功能1304,其检测何时应用在它的执行的过程中创建事件处理器以提供监视信息。SMM 402在评估应用的状态时可以咨询监视信息。例如,监视信息可标识事件处理器的存在,其转而与定义它的调用方式的特定函数相关联。状态捕捉模块404可以按照与任何其他应用定义的函数相同的方式使该函数序列化。

状态捕捉模块404可以将状态信息存储在部分920的结尾处(如在图10中示出),这反映了与DOM树中的节点相关联的任何事件处理器的存在。例如,图10指示事件处理器与“div”节点相关联,并且指示这一事件处理器也与应用定义的函数No.362相关联。

应用可例如通过传递对与事件处理器相关联的函数的引用来稍后移除事件处理器。图13的监视功能1304也可用来例如通过利用监视功能1304隐喻地(metaphorically)包装浏览器的事件取消等级功能来发现事件处理器的移除。在检测到处理器移除事件之后,假定当前状态镜像902已被先前修改为反映事件处理器的存在,则监视功能1304可以从当前状态镜像902移除对应的条目。

如将在下面描述并且如在图13中指示的,SMM 402可以应用“插入(interpositioning)”以观察除事件处理器的创建和移除之外的其他类型的状态。一般而言,插入过程利用执行环境提供的内省和反射能力。然而,SMM 402可针对各个不同的不同类型的状态应用不同的具体插入方法。

接下来考虑由与DOM节点相关联的定制属性呈现的挑战。状态捕捉模块404可以利用应用语言的内省/反射能力以发现与DOM节点相关联的定制属性。状态捕捉模块404然后可以创建将定制属性链接到它们所关联于的节点的引用。例如,图9和图10的部分920示出了定制属性被链接到“<canvas>”节点。更具体而言,“<canvas>”标签允许应用创建位映像的镜像。因为XML序列化器不捕捉位图,因此状态捕捉模块404可显式地使其序列化并将由此得到的数据存储作为当前状态镜像902内部的字符串。在图10中,与DOM特征No.3相关联的“<canvas>”标签将数据表达为十六进制的“83ff01ac...”。

定时器。应用可以向执行环境登记定时器回调。超时型定时器在指定延迟之后启动(fire)一次。间隔型定时器基于指定的周期性而重复地启动。状态捕捉模块404可以使用在图13中示出的方式来检测何时应用登记定时器。状态捕捉模块404然后可以按照与任何其他应用定义的函数相同的方式使关联的定时器函数序列化。更具体而言,如对定时器登记接口执行的插入可使得需要保存到真实(原生)定时器登记操作的引用,以及然后将登记操作重新定义为记录关于定时器的信息并随后调用原始登记操作的操作。(如对事件登记接口执行的插入以相同方式工作)

监视功能1304存储的信息包括与已被调用的定时器有关的元数据。该元数据可以描述已被调用的定时器的类型(例如,超时型定时器或间隔型定时器等)。元数据还可以描述在应用的恢复之后到定时器将启动为止的时间量。对于间隔型定时器,元数据还描述定时器的周期性。

例如,图14示出了上一次在时间1402处启动或者曾在时间1402处被发起的定时器。假定应用在时间1404处被暂停。另外假定定时器原来被调度以在时间1406处启动,并且假定时间间隔1408使时间1406与时间1408分开。状态捕捉模块404也可存储时间间隔1408。对于间隔型定时器,状态捕捉模块404还可以存储描述其周期性的间隔1410。在应用的恢复之后,状态恢复模块408指令执行环境在间隔1408中表达的时间量已经期满之后启动定时器,并且此后按照由时间间隔1410表达的周期性重复地启动。

如在图10中示出的,状态捕捉模块404可以将定时器相关的状态信息存储在当前状态镜像902的部分1002中。例如,注意到这一部分1002标识被调度以在恢复之后4秒启动并且此后按照10秒的周期性的间隔型定时器。该定时器还与对应于具有ID No.362的应用定义的函数的回调函数相关联。

(创建定时器的)定时器登记函数还可以提供表达取消ID的整数。应用可使用取消ID以经由定时器取消函数取消定时器。状态捕捉模块404也可以存储取消ID。另外,状态捕捉模块404可以使用在图13中示出的监视功能1304以确定何时应用已经取消了定时器。状态捕捉模块404然后可以从当前状态镜像902移除对应的定时器状态信息,如果其先前已被存储的话。

另外,状态捕捉模块404按照补充并考虑到其对定时器登记函数的插入的方式执行其对定时器取消函数的插入。凭借这一方式,状态捕捉模块404可以确保应用的取消定时器的请求被与待取消的定时器的身份正确地配对。例如,假定监视功能1304创建了用来引用已被创建的定时器的新引用(例如,引用Z)。但是,假定执行环境的其他组件使用另一引用(例如,引用Y)来引用该定时器。为了解决这一问题,状态捕捉模块404将执行适当的引用调整(swizzling)以确保引用Y被转换为引用Z,并且反之亦然,从而使得正确的定时器被取消。状态捕捉模块404可以关于事件处理器的登记和注销采用相同方法,以确保在应用的移除事件处理器的指令之后正确的事件处理器被移除。

盘存储特征。应用在至少两种情况中可经由浏览器将信息存储在计算设备的本地数据存储库上。在第一种情况中,应用可以将cookie存储在本地数据存储库中。在第二种情况中,应用可以使用DOM存储接口来存储信息;这一接口将键/值抽象呈现给应用,并且允许应用存储比由cookie接口允许的大得多的数据项。状态捕捉模块404可以按照作为名称—值对的字符串的形式存储cookie。状态捕捉模块404还可以按照作为一系列的键和值的字符串的形式使DOM存储信息序列化。在图10的情境中,状态捕捉模块404可以将cookie相关的状态信息存储在部分1004中,并且将DOM存储相关的状态信息存储在部分1006中。

网络相关的特征。应用可经由诸如AJAX接口之类的若干机制与远程实体(诸如由远程服务器提供的另一web应用)交互。在这种情况下,应用可以创建新的XMLHttpRequest对象,其标识与远程服务器相关联的URL以及与请求相关联的任何数据。浏览器然后使用对象中的信息来联系远程服务器。应用可以为对象创建事件处理器;浏览器在接收到来自远程服务器的数据之后将调用这一处理器。

假定用户在进行中的网络交互的过程中暂停应用。状态捕捉模块404被配置为存储表达运行中网络连接并且允许状态恢复模块408恰当地恢复网络交互的状态信息。

在一种技术中,状态捕捉模块404再一次使用在图13中示出的类型的监视功能1304来“包装”应用用来创建XMLHttpRequest对象的接口。更具体而言,监视功能1304可为通过XMLHttpRequest接口创建的底层对象的多个方法和特征创建“包装器代码”。通过这么做,监视功能1304可以标识进行中的网络交互,包括与远程服务器相关联的URL以及由应用定义的任何网络处理器。监视功能1304可以记录监视对象中的所有这样的信息。状态捕捉模块404可以将与监视对象有关的信息存储在当前状态镜像902的部分1008中。

在用来恢复应用的请求之后,状态恢复模块408可以提取在当前状态镜像902(其在此时构成先前状态镜像)中提供的状态信息。基于部分1008中的信息,状态恢复模块408确定是否存在任何进行中的网络交互。状态恢复模块408然后可以使用存储的信息重新启动任何终止的网络请求,例如,通过重新发送终止的网络请求。

在许多情况下,应用使用REST式样的协议来实现客户端与服务器之间的交互。在这种情况下,不要求远程服务器保持任何客户端侧状态;作为替代,期望客户端保留状态信息。使用REST协议的应用可以按照上面规定的方式暂停和恢复进行中的网络连接,而没有其他特殊规定。

在一些情况中,服务器可存储客户端的会话状态。例如,假定远程服务器使每个用户会话与IP地址相关联。还假定用户在(与第一IP地址相关联的)第一计算设备上暂停应用并且稍后在(与第二IP地址相关联的)第二计算设备上恢复它。这样的情况可能使对被暂停的交互的恢复复杂化。迁移功能可以按照诸如在图15中示出的策略之类的不同方式解决这一情况。在这里,第一计算设备1502(应用在其上被暂停)和第二计算设备1504(应用在其上被恢复)被配置为与具有稳定IP地址的委托代理1506交互。应用服务器1508通过委托代理1506的稳定存在来与客户端计算设备(1502 1504)交互。

图16和图17一起示出了过程1602,其概述了状态捕捉模块404的一种操作方式。在方框1604中,状态捕捉模块404标识由执行环境(例如,浏览器)定义的堆相关的特征(例如,对象和函数)。在方框1606中,状态捕捉模块404生成并存储表达环境定义的堆相关的特征的信息。在方框1608中,状态捕捉模块404标识由应用自身定义的堆相关的特征(例如,对象和函数)。在方框1610中,状态捕捉模块404生成并存储与应用定义的堆相关的特征相关联的状态信息。

在方框1612中,状态捕捉模块404标识与DOM树相关联的特征,包括与DOM节点相关联的事件处理器以及与DOM节点相关联的其他定制属性。在方框1614中,状态捕捉模块404生成并存储用于DOM树特征的状态信息。

继续到图17,在方框1704中,状态捕捉模块404标识例如与被应用登记并且/或者稍后被应用取消的不同类型的定时器相关联的定时器相关的特征。在方框1706中,状态捕捉模块404生成并存储与定时器相关特征相关联的状态信息。

在方框1708中,状态捕捉模块404可以标识与被应用经由浏览器存储在计算设备的本地数据存储库中的信息相关联的特征。这样的信息可包括cookie、DOM相关的信息等。在方框1710中,状态捕捉模块404可生成并存储与本地存储相关的特征相关联的状态信息。

在方框1712中,状态捕捉模块404可以标识与诸如使用AJAX协议或者某一其他协议的网络交互之类的进行中的网络交互相关联的特征。在方框1714中,状态捕捉模块404可以生成并存储与网络相关的特征相关联的状态信息。

状态捕捉模块404可以按照与在图16和图17中图示的顺序不同的顺序(包括并行方式)来捕捉上述状态信息。另外,与在图16和图17中标识的各类型的状态信息相比,SMM 402的其他实现方式可以标识并存储其他类型的状态信息。因此,在图16和图17中描述的过程1602将被以例示而非限制的精神解释。

C.状态恢复模块

图18示出了过程1802,其表示图4的状态恢复模块408的一种操作方式。一般而言,状态恢复模块408可以基于先前状态镜像来恢复应用。先前状态镜像对应于在应用被暂停时创建的当前状态镜像,但是其现在有资格作为“先前”以反映其在将应用恢复到其先前状态时的角色。重申,SMM 402可调用与应用曾在其上被暂停的设备相比不同的计算设备上的状态恢复模块408。在这种情况中,状态恢复模块408可从远程数据存储库126取回先前状态镜像。在另一情况中,状态恢复模块408可在应用曾在其上被暂停的同一计算设备上恢复应用。在该情况中,状态恢复模块408可以从本地数据存储库130(和/或远程数据存储库126)取回先前状态镜像。

在方框1804中,状态恢复模块408恢复在先前状态镜像中描述的堆相关的特征。更具体而言,在第一阶段中,状态恢复模块408创建包含环境定义的对象和函数的初始为空的框架。状态恢复模块408然后遍历先前状态镜像中的环境定义的对象和函数的图,从而分别向每一个指派唯一的对象ID或函数ID。

在第二阶段中,状态恢复模块408可以基于在对象地图914和函数地图916中提供的信息来恢复应用定义的对象和函数。例如,状态恢复模块408可以使用JSON解析技术来重新创建应用定义的对象。状态恢复模块408可以通过将应用代码的指定字符串呈现转换为该代码的可执行表示来恢复应用定义的函数。关于对应于原生对象的实例化的应用定义的对象,状态恢复模块408可以使用适当的特定于对象的变换器来重新创建这些对象。

在第三阶段中,状态恢复模块408可以标识尚未被实例化的联系,并且使那些联系实例化。例如,环境定义的对象之间的联系在框架初始加载时由环境自动创建。然而,状态恢复模块408被单独地应用以恢复应用定义的对象和函数之间的联系,因为那些联系被表示为先前状态镜像中的“扁平式指针(flattened pointer)”(例如,参见对象753在图9中具有的“扁平式指针”$$o752)。状态恢复模块408还恢复应用定义的对象与环境定义的对象之间的联系(并且反之亦然),因为这些联系在执行环境使框架初始化时未被自动恢复。在所有情况下,状态恢复模块408使用扁平式指针中的对象ID和函数ID来确定如何恢复缺少的联系。

在方框1806中,状态恢复模块408基于在先前状态镜像的DOM树部分920中提供的信息来构造DOM树。状态恢复模块408然后使用在DOM部分920的结尾处出现的补充数据来重新建立事件处理器与DOM节点之间的任何关联。状态恢复模块408还以特定于属性的方式(诸如通过使用于任何“<canvas>”标签的位图初始化)来恢复DOM节点的任何定制属性。

在方框1808中,状态恢复模块408可以基于从先前状态镜像的定时器相关的部分1002提取的信息来恢复任何活动定时器。假定预期定时器在图14中示出的间隔1408之后启动。当应用恢复时,状态恢复模块408可以控制定时器以使得其在该间隔之后启动。状态恢复模块408还可以指令定时器按照由间隔1410定义的周期性启动,假定其是间隔型定时器的话。

在方框1810中,状态恢复模块408基于在先前状态镜像的网络相关的部分1008中给予的信息来恢复任何进行中的网络连接。其通过标识先前状态镜像中的(由图13中的监视功能1304创建的)任何XMLHttpRequest包装器对象来执行这一任务。状态恢复模块408可以使用由那些对象给予的信息以重新启动由于应用的暂停而被终止的任何网络连接。

在方框1812中,状态恢复模块408可以从先前状态镜像的cookie相关的部分1006提取cookie信息。类似地,状态恢复模块408可以从先前状态镜像的DOM相关的部分1004提取DOM相关的信息。状态恢复模块408然后可以将该信息添加到当前计算设备的本地数据存储库,假定其在该数据存储库中不是已经存在的话。

D.用来提高迁移效率的变体

如在章节A中描述的,SMM 402通过关于执行环境的操作(例如,浏览器的操作)而非计算设备的整体操作表示状态来减少与当前状态镜像相关联的状态信息的量。该规定转而允许状态信息被以高效方式存储、转移和取回。这一章节描述了被设计用来提高状态迁移任务的效率的另外的机制。

在图19的机制中,开发者可利用不同的标签来标记应用代码1902的特征。特征可对应于上述的任何应用项目,诸如对象、函数等。标签标识将被用来执行迁移任务的一个或多个方面的不同技术。可以按照任何方式(诸如通过向特征添加传达特定类型的标签的属性)利用标签来注释特征。

利用指示将以异步方式迁移特征的标签来注释至少一个特征1904。更具体而言,状态捕捉模块404可通过将与特征1904有关的状态信息存储在当前状态镜像的特定部分中来回应对这一标签的检测。该特殊部分可被称为异步部分,并且与该部分相关联的特征可被称为异步特征。当前状态镜像的剩余部分可被称为同步部分,并且与该部分相关联的特征可被称为同步特征。在用来恢复应用的状态的指令之后,状态恢复模块408将以上面在章节C中描述的方式立即恢复所有同步特征。另一方面,状态恢复模块408可以在恢复同步特征之后的稍后时间恢复所有异步特征。

例如,状态恢复模块408可以按照按需方式恢复异步特征,例如,当用户试图执行需要这些特征中的一个或多个特征的操作时恢复异步特征。备选地或者附加地,状态恢复模块408可以根据任何恢复调度和/或基于任何触发因素来恢复异步特征。例如,在关于应用的操作在后台发生的更新任务中,状态恢复模块408可以按照滚动调度恢复异步特征。备选地或者附加地,状态恢复模块408可以在一个或多个资源利用度量在规定阈值之下时(例如,指示浏览器在当前时间未负担过重,并且因而是恢复异步特征的适当时间)恢复异步特征。

为了提供一个示例,特征1904可属于应用的不常使用的部分。应用开发者可根据用户在恢复应用之后将不太可能希望与该特征交互而将该特征指定为异步特征。但是,如果用户的确选择与需要使用该特征的应用部分交互,则状态恢复模块408可以按照按需方式在此时恢复用于该部分的状态。

在一种情况中,应用开发者可例如基于他的或她的判断来手动地选择异步特征的子集。在另一情况中,应用开发者可查阅统计数据,这些统计数据揭示特征被利用的频率和/或特征被利用处的应用过程的阶段。应用开发者可使用统计数据作为选择子集异步特征时的指导。

备选地或者附加地,状态捕捉模块404内的自动化代理可以动态地确定用户正在使用计算设备的方式,和/或用户在应用的暂停之前与应用交互的方式。该代理然后可以选择将被以异步方式恢复的特征的子集。例如,假定用户看起来排他地仅仅与应用的一部分交互;代理可以检测到该行为模式,并且将那些特征标记为异步迁移。稍后,状态恢复模块408可以发现那些特征正在异步地迁移,并且如先前所讨论在后台加载它们或者按需加载它们。另外,状态恢复模块408中的自动化的代理还可以监视用户在应用的恢复之后正在与应用交互的方式。基于该模式,代理可以修改它恢复应用的尚待恢复特征的时刻,例如,通过使对不久很可能需要的特征的恢复加速,和/或使对不太可能不久需要的特征的恢复延迟。

在其他情况中,应用开发者或自动化代理可以在多值范围(multi-valued scale)内注释每个特征,从而指示与该特征相关联的相关紧急程度。状态恢复模块408然后可以按照具有不同紧急类的组来恢复特征,如由与这些特征相关联的特征反映的。

继续对图9的描述,至少一个其他应用特征1906被用指示其将根本不会被迁移的标签注释。状态捕捉模块404通过不为特征1906生成并存储状态信息来回应这样的标签。例如,应用开发者可确定特定特征在应用的操作中担当次要和非关键角色,诸如法律免责声明的显示。状态捕捉模块404可以从当前状态镜像省略用于这样的特征的状态信息。在其他情况中,特定特征与通常仅在用户首次加载应用时被调用的函数相关联。状态捕捉模块404可以省略用于这一特征的状态信息,因为其在用户与应用的交互的稍后阶段中没有用或者用处小。应用开发者可以按照上面阐明的任何方式选择将被用上述类型的标签标记的特征的子集,例如,通过以自组织(ad hoc)方式手动地选择特征,或者通过查阅描述特征在实践中被使用的方式的统计数据。

至少一个其他应用特征1908基于在当前状态镜像中提供的状态信息而被用指示其将不会被恢复的标签标记。相反,标签指令状态恢复模块408下载该特征的新版本。再一次,应用开发者可按照上面阐明的任何方式选择将被用上述类型的标签标记的特征的子集,例如,通过以自组织方式手动地选择特征,或者通过查阅描述特征在实践中被使用的方式的统计数据。

其他实现方式可使用其他类型的标签。上面的示例通过例示而非限制方式被引用。

图19还示出了堆存储器1910的一部分。堆存储器1910中的一些特征(例如,对象、函数等)具有例如可被表达为这些特征的属性的标签。例如,特征1912和特征1914具有相应的标签。状态捕捉模块404可以按照上述方式检测标签并处理相关联的特征,例如,通过将用于一些标签的状态信息放置在当前状态镜像的特殊异步部分中,或者通过完全省略用于被标记特征的状态信息,等等。子代特征可继承其父代或祖代的标签。因此,状态捕捉模块404可以按照如它们的相应的被标记父代/祖代特征相同的方式处理子代特征。

图20图示了状态恢复模块408可用来恢复当前状态镜像2002中的状态信息的一种技术,其中状态信息被分成同步部分2004和异步部分。如上所述,状态恢复模块408可立即恢复与同步部分2004相关联的状态。状态恢复模块408可为由异步部分2006表示的一个或多个特征产生垫片(shim)对象2008。如果被恢复的应用曾经访问垫片对象2008(指示应用希望使用该特征),则垫片对象2008将恢复与异步部分2006相关联的相关特征。

作为被设计用来提高效率的第二规定,状态捕捉模块404在暂停应用之前可以按照增量方式存储与应用相关联的状态信息。一旦应用被暂停,则状态捕捉模块404在需要的情况下可以执行对状态信息的最后增量更新。借助这样的技术,SMM 402可以减少在应用被暂停时捕捉状态信息所需的时间量。在一种情况中,状态捕捉模块404执行上面标识的增量更新操作以捕捉用于如被存储在计算设备的本地数据存储库上的DOM存储值的状态信息。也就是说,状态捕捉模块404可以以DOM相关的信息为目标,因为其可表示当前状态镜像的最大部分。

例如,参考图21,假定在时间t1处,本地DOM存储装置2102包含DOM信息的第一实例。该DOM信息被一般地图示为由被标记为A、B、C等的值组成。在时间t2(t2>t1)处,DOM存储装置2102存储DOM信息的第二实例。如在图21中以图形方式表示的,在时间t2处,只有被标记为“B”和“D”的值已经改变。因此,状态捕捉模块404可以仅针对与值B和D相关联的信息2106的子集来更新当前状态镜像。

更具体而言,状态捕捉模块404可以计算在当前时间存在于本地数据存储库中的DOM存储值的散列,或者仅计算正被新添加到本地数据存储库的值的散列。状态捕捉模块404然后可以用与DOM存储装置的先前捕捉的状态相关联的先前散列的集合来计算当前散列。这一操作产生与自上次状态检查起已经改变的DOM存储值对应的零个、一个或更多个不同散列的集合。状态捕捉模块404然后可以将与改变的值相关联的状态信息添加到当前状态镜像。在一种情况中,状态捕捉模块404可以将该增量更新信息存储在本地数据存储库中。备选地或者附加地,状态捕捉模块404可以将增量更新信息发送到远程数据存储库126以用于存储。

图22示出了上述技术的变体。也就是说,如在图22中一般地指示的,DOM存储装置2202可包含不同大小的值;一些值可以极小,并且一些值可以极大。如果值为大,则状态捕捉模块404可以按照逻辑方式将该值分成多条(例如,使用已知的Rabin指纹散列技术),并且仅关于该值的已经改变的各条生成用于值的增量更新。值的各条可具有不同的基于内容的大小。

状态恢复模块408还可以(例如,从远程数据存储库126)选择性地下载在计算设备(应用正在其上被恢复)的本地存储装置中不是已经存在的DOM存储块。

图23是过程2302,其表示状态捕捉模块404的响应于遭遇经标记特征的一种操作方式。在方框2304中,状态捕捉模块404标识与特征相关联的标签。在方框2306中,状态捕捉模块404按照取决于该标签的方式向当前状态镜像添加与特征相关联的状态信息。例如,如果该标签指示该特征是异步特征,则状态捕捉模块将状态信息存储在当前状态镜像的异步部分中。

图24示出了基于与特征相关联的标签来恢复特征的过程2402。在方框2402中,状态恢复模块408标识与状态元素相关联的分类,其转而指示相关联的特征被用特定标签标记。在方框2406中,状态恢复模块408按照取决于它的标签的方式(例如,在它的状态信息在当前状态镜像的特殊异步部分中出现的情况下通过异步地恢复特征)来恢复程序特征。

图25示出了过程2502,其表示状态恢复模块408可恢复已被标记为异步的特征的一种特定方式。在方框2504中,状态恢复模块408例如基于用于特征的状态信息在当前状态镜像的异步部分中的存在而标识待恢复的程序特征是异步特征。在方框2506中,状态恢复模块408产生用于程序特征的垫片对象。在方框2508中,状态恢复模块408接收用户的要与特征交互的请求。或者状态恢复模块408独立地选择恢复考虑中的特征。在方框2510中,状态恢复模块408恢复特征,从而用实际特征替换垫片对象。

图26示出了用于按照增量方式更新当前状态图像的过程2602。在方框2606中,状态捕捉模块404创建在当前时间存在的值的集合的当前散列。在方框2606中,因为值的该集合在先前时间存在,所述状态捕捉模块404将当前散列与值的该集合所关联于的先前散列比较。这一操作产生零个、一个或者更多个不同散列的集合。

在方框2608中,状态捕捉模块404关于与不同散列的集合中的散列对应的值来更新当前状态镜像。在方框2610中,状态捕捉模块404确定应用是否已被暂停。在方框2612中,状态捕捉模块404更新当前状态镜像以使得其反映应用在暂停时的最终状态。在图26的情境中,数据“值”具有广泛含义;例如,在Rabin指纹方法被使用的情况中,值可对应于一条更大的值。

E.代表性计算功能

图27示出了可用来实现图1的环境102的任何方面的计算功能2702。例如,图22中所示的类型的计算功能2702可用来实现任何用户计算设备(例如,图1的客户端计算设备104和108)、任何服务器计算设备(例如,图1的应用源116和迁移管理模块128)等的任何方面。在所有情况中,计算功能2702表示一个或多个物理且有形的处理机构。

计算功能2702可包括一个或多个处理设备2704,诸如一个或多个中央处理单元(CPU)和/或一个或多个图形处理单元(GPU)等等。

计算功能2702还可包括用于存储诸如代码、设定、数据等之类的任何种类的信息的任何存储资源2706。不带限制地,例如,存储资源2706可包括以下各项中的任何项:任何一个或多个类型的RAM、任何一个或多个类型的ROM、闪存设备、硬盘、光盘等。更一般而言,任何存储资源可使用用于存储信息的任何技术。另外,任何存储资源可提供对信息的易失性或非易失性的保留。另外,任何存储资源可表示计算功能2702的固定或者移动的组件。当处理设备2704执行存储在任何存储资源或存储资源的组合中的指令时,计算功能2702可执行上面描述的任何功能。

关于术语,存储资源2706中的任何存储资源或者存储资源2706的任何组合可被看作计算机可读介质。在许多情况中,计算机可读介质表示某种形式的物理并且有形的实体。术语计算机可读介质还包括传播信号,例如,经由物理管道和/或空气或其他无线介质等而被传输或接收的。然而,特定术语“计算机可读存储介质”和“计算机可读介质设备”明确地排除了传播信号本身,而是包括所有其他形式的计算机可读介质。

计算功能2702还包括用于与任何存储资源交互的一个或多个驱动机构2708,诸如硬盘驱动机构、光盘驱动机构等等。

计算功能2702还包括用于(经由输入设备2712)接收各种输入并且用于(经由输出设备2714)提供各种输出的输入/输出模块2710。输入设备2712可包括键入设备、鼠标录入设备、支持触摸的录入设备、语音录入设备等中的任何设备。一种特定输出机构可包括呈现设备2716和关联的图形用户界面(GUI)2718。计算功能2702还可以包括用于经由一个或多个网络2722与其他设备交换数据的一个或多个网络接口2720。一个或多个通信总线2724将上述组件通信地耦合在一起。

一个或多个网络2722可以按照任何方式被实现,例如,通过局域网、广域网(例如,因特网)、点对点连接等,或这些的任何组合。一个或多个网络2722可包括由任何协议或协议的组合管理的硬连线的链路、无线链路、路由器、网关功能、名称服务器等的任何组合。

备选地或附加地,前述各节中所述的任何功能可至少部分地由一个或多个硬件逻辑组件来执行。例如,在非限制的情况下,计算功能2702可使用以下各项中的一项或多项而被实现:现场可编程门阵列(FPGA);专用集成电路(ASIC);专用标准产品(ASSP);片上系统(SOC);复杂可编程逻辑器件(CPLD)等。

作为结束语,说明书可能在例示性挑战或问题的情境中描述了各种概念。这种说明方式不构成其他人已经以在此指定的方式认识到和/或明确表达挑战或问题的表示。另外,要求保护的主题也不仅限于解决提到的挑战/问题中的任何或全部的实现方式。

尽管已经用特定于结构特征和/或方法动作的语言描述了本主题内容,但是,将会明白,所附权利要求书中定义的主题内容不一定限于上述特定特征或动作。相反,上述特定特征和动作作为实现权利要求的示例形式而被公开。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1