用戶通常經(jīng)由瀏覽器與各種服務進行交互。例如,許多用戶主要地或者排他地使用支持web的電子郵件應用,而非更傳統(tǒng)的桌面電子郵件功能。在另一趨勢中,用戶現(xiàn)在通常經(jīng)由多個用戶設備與各應用進行交互。例如,用戶可使用智能電話、平板型設備、游戲機和/或傳統(tǒng)的臺式計算設備等在不同時間和在各個不同情境中與同一應用進行交互。在不久的將來,用戶還可將可穿戴計算設備添加到它們的常用計算設備的套件。
考慮一種情形,其中用戶希望暫停其與第一設備上的特定支持web的應用的交互,并且在稍后時候在第二設備上(或在同一設備上)恢復該交互。當前不存在用于高效且正確地保留用戶與第一設備處的應用的交互的狀態(tài)并且使該狀態(tài)對第二(或第一)設備可用的功能。一種現(xiàn)有機制允許用戶在從第一設備移動到第二設備時保留他的或她的標簽選擇;但是這一機制不保留用戶的會話的內容。另外,數(shù)據(jù)中心環(huán)境通常使用虛擬機技術以使用管理程序等在計算設備之間轉移狀態(tài)。但是由這一技術產生的鏡像的大小可以極大。通過諸如無線蜂窩連接之類的普通商業(yè)鏈路發(fā)送這樣大量的信息是不可行的。
技術實現(xiàn)要素:
在此描述了一種狀態(tài)遷移模塊(SMM),其在用戶計算設備之間或者在發(fā)生在各個不同時間的與同一設備上的應用的不同交互之間無縫、高效且正確地轉移應用狀態(tài)。SMM通過保留應用的相對于高級程序在瀏覽器執(zhí)行環(huán)境或相似環(huán)境上的執(zhí)行的當前狀態(tài)來操作,而非通過將底層計算設備的操作作為整體保留來操作。這一特性減少了描述應用的當前狀態(tài)所需的信息量。例如,由SMM捕捉的狀態(tài)不反映與計算設備的硬件或操作系統(tǒng)接口相關聯(lián)的低層狀態(tài)。
根據(jù)另一例示性方面,SMM可被實現(xiàn)為庫模塊,其與執(zhí)行應用的功能的應用代碼模塊一起從遠程實體被接收。執(zhí)行環(huán)境(例如,瀏覽器)可使用它的原生資源來執(zhí)行庫模塊,而不一定要求用戶手動地安裝特殊程序等(盡管該情形也不被排除)。
根據(jù)另一例示性方面,SMM通過部分地利用用來表達應用的語言的內省(introspection)/反射(reflective)能力來捕捉當前應用狀態(tài)的特征。
根據(jù)另一例示性方面,SMM捕捉豐富描述性的狀態(tài)信息。例如,SMM可以捕捉描述存儲在堆存儲器中的信息(包括環(huán)境定義的對象和函數(shù),以及應用定義的對象和函數(shù))的特征、描述與應用相關聯(lián)的DOM樹的特征、描述由應用登記的定時器的特征、描述進行中的網(wǎng)絡連接的特征、描述由應用存儲在本地數(shù)據(jù)存儲庫中的信息的特征,等等。
根據(jù)另一例示性方面,SMM可以諸如通過靜態(tài)地重寫閉包并且使用征收(imposition)或者其他技術監(jiān)視應用創(chuàng)建和移除定時器、事件處理器等的方式來施加用來使應用狀態(tài)顯露的特殊規(guī)定。
根據(jù)另一例示性方面,SMM可以利用附加規(guī)定來提高狀態(tài)遷移的效率。在一種情況下,應用開發(fā)者可向應用的特征添加標簽;SMM然后基于這些標簽以特定方式處理特征。例如,一種類型的標簽可指令SMM異步地恢復與關聯(lián)的特征相關聯(lián)的狀態(tài)。
在被設計用來提高遷移效率的另一規(guī)定中,SMM可在應用的暫停之前基于增量來存儲狀態(tài)信息。
上面的方式可以被體現(xiàn)在各種類型的系統(tǒng)、設備、組件,方法、計算機可讀介質、數(shù)據(jù)結構、圖形用戶界面展示、制品等中。
提供本發(fā)明內容是為了以簡化的形式介紹概念的選集;這些概念在以下具體實施方式中被進一步描述。本發(fā)明內容并不旨在標識所要求保護的主題內容的關鍵特征或必要特征,也不旨在用來限制所要求保護的主題內容的范圍。
附圖說明
圖1示出了在兩個計算設備之間或者在各個不同時間使用同一設備的兩個交互之間無縫且正確地轉移應用的狀態(tài)的環(huán)境。
圖2示出了一種向計算設備遞送狀態(tài)遷移模塊(SMM)的方式。SMM是圖1的環(huán)境的組件。
圖3示出了圖2的實現(xiàn)方式的擴展,從而解決其中應用包括與相應框架相關聯(lián)的兩個或更多個應用模塊的情況。
圖4示出了在圖1中使用的SMM的一種實現(xiàn)方式。SMM包括用于捕捉當前狀態(tài)的狀態(tài)捕捉模塊,以及用于基于先前狀態(tài)來恢復應用的狀態(tài)恢復模塊。
圖5示出了提供圖4的狀態(tài)恢復模塊的一種操作方式的概覽的過程。
圖6示出了提供圖4的狀態(tài)恢復模塊的一種操作方式的概覽的過程。
圖7示出了用戶界面展示的片段,從而描繪可用來明確暫停應用并存儲該應用的當前狀態(tài)的可選控制機構。
圖8示出了由圖4的狀態(tài)捕捉模塊產生的當前狀態(tài)鏡像的概覽。
圖9和圖10一起示出了根據(jù)一種例示性實現(xiàn)方式的另一更詳細的當前狀態(tài)鏡像。
圖11表示由計算設備提供的堆存儲器的一部分。堆存儲器包含由應用在執(zhí)行期間產生的程序特征。
圖12圖示了(圖4的)狀態(tài)捕捉模塊可通過其靜態(tài)地重寫代碼以便使閉包變量顯式的方式。
圖13圖示了(圖4的)狀態(tài)捕捉模塊可通過其監(jiān)視應用創(chuàng)建和移除定時器、事件處理器等的方式。
圖14示出了(圖4的)狀態(tài)捕捉模塊可用來表達基于間隔的定時器的狀態(tài)的定時信息。
圖15示出了涉及不管從第一計算設備到第二計算設備的應用狀態(tài)的遷移而使用代理以將穩(wěn)定端點顯露給應用服務器的策略。
圖16和圖17共同示出了以與圖5的過程相比更多例示性細節(jié)的方式表示狀態(tài)捕捉模塊的操作的過程。
圖18示出了以與圖6的過程相比更多例示性細節(jié)的方式表示狀態(tài)恢復模塊的操作的過程。
圖19圖示了用于基于由應用開發(fā)者向應用的特征添加的標簽而以不同方式遷移狀態(tài)信息的策略。
圖20圖示了(圖4的)狀態(tài)恢復模塊可通過其基于在圖19中標識的標簽來恢復應用的狀態(tài)的方式。
圖21一示例如用于使用具有相等大小的更新分段來遞增地存儲當前狀態(tài)信息的策略。
圖22示出了圖21的策略的變體。
圖23是從(圖4的)狀態(tài)捕捉模塊的角度描述(圖19和圖20的)加標簽策略的操作的過程。
圖24和圖25是從(圖4的)狀態(tài)恢復模塊的角度描述(圖19和圖20的)加標簽策略的操作的過程。
圖26是從(圖4的)狀態(tài)捕捉模塊的角度描述(圖21和圖22的)增量更新操作的操作的過程。
圖27示出了可用來實現(xiàn)在前述附圖中示出的特征的任何方面的例示性計算功能。
相同的數(shù)字在整個公開內容和附圖中用來引用相似的組件和特征。100系列數(shù)字指代原來在圖1中找到的特征,200系列數(shù)字指代原來在圖2中找到的特征,300系列數(shù)字指代原來在圖3中找到的特征,諸如此類。
具體實施方式
本公開內容按如下被組織。章節(jié)A提供了用于遷移應用狀態(tài)的環(huán)境的概覽。該環(huán)境利用在計算設備上運行的狀態(tài)遷移模塊(SMM)的實例。章節(jié)B描述作為每個SMM的組件的狀態(tài)捕捉模塊的操作。章節(jié)C描述作為SMM的另一組件的狀態(tài)恢復模塊的操作。章節(jié)D描述被設計用來提高狀態(tài)被遷移的效率的各種機制。章節(jié)E描述可用來實施在前述章節(jié)中描述的特征的任何方面的例示性計算功能。
作為引文,一些附圖在被不同地稱為功能、模塊、特征、要素等的一個或多個結構組件的情境中描述概念。附圖中示出的各組件可以通過任何物理和有形機構(例如,通過在計算機設備上運行的軟件、硬件(例如,芯片實現(xiàn)的邏輯功能)等和/或其任何組合)用各種方式被實現(xiàn)。在一種情況下,附圖中所圖示的將各種組件分離為不同的單元可以反映在實際實現(xiàn)方式中使用對應的不同的物理和有形組件。備選地或附加地,附圖中所圖示的任何單個組件都可以通過多個實際物理組件被實現(xiàn)。備選地或附加地,對附圖中的任何兩個或更多個單獨的組件的描繪可以反映由單個實際物理組件執(zhí)行的不同的功能。將轉而被描述的圖27提供了關于附圖中所示出的功能的一種例示性物理實現(xiàn)方式的附加細節(jié)。
其他附圖以流程圖形式描述了概念。以這一形式,某些操作被描述為構成按某一順序執(zhí)行的不同的框。這樣的實現(xiàn)方式是例示性的而非限制性的。在此描述的某些框可被分組在一起并在單個操作中被執(zhí)行,某些框可被分成多個組件框,并且某些框可以按與在此圖示出的順序不同的順序被執(zhí)行(包括以并行方式執(zhí)行這些框)。在流程圖中圖示的各個框可以通過任何物理和有形機構(例如,通過在計算機設備上運行的軟件、硬件(例如,芯片實現(xiàn)的邏輯功能)等和/或其任何組合)用任何方式被實現(xiàn)。
關于術語,短語“被配置為”包含任何種類的物理和有形的功能可以被構建以執(zhí)行標識的操作的任何方式。功能可以被配置為使用例如正在計算機設備上運行的軟件、硬件(例如,芯片實現(xiàn)的邏輯功能)等和/或其任何組合來執(zhí)行操作。
術語“邏輯”包含用于執(zhí)行任務的任何物理和有形的功能。例如,在流程圖中圖示的每個操作對應于用于執(zhí)行該操作的邏輯組件。可以使用例如正在計算機設備上運行的軟件、硬件(例如,芯片實現(xiàn)的邏輯功能)等和/或其任何組合來執(zhí)行操作。在由計算設備實現(xiàn)時,邏輯組件表示作為計算系統(tǒng)的物理部分的、無論如何實現(xiàn)的電子組件。
以下說明可以將一個或多個特征標識為“可選”。這種類型的陳述不應該被解釋為可以被視為可選的特征的窮盡的指示;也就是說,其他特征也可以被視為可選,雖然在文本中沒有明確地標識。另外,任何對單個實體的描述并非旨在排除對多個這樣實體的使用;類似地,對多個實體的描述并非旨在排除對單個實體的使用。最后,術語“示例性”或“例示性”指的是可能的許多實現(xiàn)方式中的一種實現(xiàn)方式。
A.遷移框架的概覽
圖1示出了環(huán)境102,其中第一計算設備104捕捉應用的第一實例106的當前狀態(tài)。第二計算設備108在稍后時候從如由第一計算設備104捕捉的當前狀態(tài)定義的接合點(juncture)開始恢復與同一應用的另一實例110的交互。在一種情形中,第一計算設備104與第二計算設備108不同。在另一種情形中,第一計算設備104與第二計算設備108相同。但是為了簡化以下說明,以下描述將強調第一種情況,其中第一計算設備104與第二計算設備108不同。
第一和第二計算設備(104,108)可對應于執(zhí)行計算功能的用戶設備。計算設備(104,108)例如可被從任何以下各項選擇:臺式計算設備、游戲機、機頂盒設備、膝上型計算設備、上網(wǎng)本型計算設備、平板型計算設備、智能電話或其他蜂窩電話設備、個人數(shù)字助理設備、音樂播放設備、電子書閱讀器設備、便攜式電玩(game-playing)設備、可穿戴計算設備、智能家電設備等。在下文中,將假定同一用戶在各個不同時間與第一計算設備104和第二計算設備108交互。但是并不需要是這種情況;例如,一個人可暫停她與第一計算設備104上的應用的交互并且然后指令另一個人恢復與第二計算設備108上的同一應用的交互。另外,可以基于由第一計算設備104捕捉的狀態(tài)在兩個或更多個計算設備上恢復應用的實例。
第一計算設備104使用第一執(zhí)行(即,運行時)環(huán)境112以運行應用,而第二計算設備108使用第二執(zhí)行(即,運行時)環(huán)境114以運行應用。執(zhí)行環(huán)境(112,114)可對應于安裝在相應計算設備(104,108)上的瀏覽器。在另一種情況下,執(zhí)行環(huán)境(112,114)中的一個或多個可對應于被設計用來運行支持web的應用的任何功能,其中該功能并不對應于瀏覽器本身。例如,執(zhí)行環(huán)境(112,114)中的一個或多個可對應于獨立的解釋器。
在一種實現(xiàn)方式中,第一執(zhí)行環(huán)境112使用與第二執(zhí)行環(huán)境114相同類型的平臺。例如,兩個執(zhí)行環(huán)境(112,114)均可對應于由華盛頓州雷德蒙市的微軟公司提供的Internet(IE)瀏覽器。在另一種情況下,第一執(zhí)行環(huán)境112與第二執(zhí)行環(huán)境114不同;例如,第二執(zhí)行環(huán)境114可對應于瀏覽器,而第一執(zhí)行環(huán)境112可對應于微軟的IE瀏覽器。
圖1還示出了兩個計算設備(104,108)均從遠程應用源116取回應用的實例。遠程應用源116可對應于遠程服務器,或者遠程服務器的集合。每個計算設備可通過指定與遠程應用源116相關聯(lián)的網(wǎng)絡地址(例如,統(tǒng)一資源定位符)來訪問遠程應用源116。更一般而言,計算設備(104,108)可以從任何源或者源的組合獲得與應用相關聯(lián)的代碼,任何源或者源的組合中的任一個關于計算設備(104,108)可以是本地的或是遠程的。
在一種情況下,應用源可提供與單個特定應用相關聯(lián)的代碼。因此,在該情況下,計算設備(104,108)將與不同的應用源交互以運行各個不同應用。在另一情況下,應用源可提供與兩個或更多個應用相關聯(lián)的代碼。
在在此強調的示例中,應用對應于被通俗地稱為web應用之物。web應用可提供執(zhí)行任何任務(諸如通過發(fā)送和接收電子郵件等)的任何功能。備選地,web應用可用作遞送信息的主要目的(諸如通過顯示博客條目等)。在許多情況下,web應用可被實現(xiàn)為超文本標記語言(HTML)資源、樣式表資源(諸如層疊樣式表資源)和行為執(zhí)行資源(諸如資源)的集合。瀏覽器從諸如遠程應用源116之類的任何一個或多個應用源下載這些資源。用戶然后經(jīng)由執(zhí)行環(huán)境(例如,瀏覽器)與應用交互。但是,更一般而言,應用可對應于被設計用來在任何高級執(zhí)行環(huán)境(諸如瀏覽器)內執(zhí)行的任何程序。
第一執(zhí)行環(huán)境112還包括(或者以其他方式可以訪問)狀態(tài)遷移模塊(SMM)的第一實例118,而第二執(zhí)行環(huán)境114包括(或者以其他方式可以訪問)SMM的第二實例120。暫時跳過附圖的順序,圖4是SMM 402的高級邏輯描繪。SMM 402實現(xiàn)兩個基本功能;其卻居于其被調用在其中的情境在給定時間執(zhí)行這些功能之一。狀態(tài)捕捉模塊404通過在指定時間捕捉應用的當前狀態(tài)來執(zhí)行第一功能。在這里呈現(xiàn)的大多數(shù)示例中,指定時間對應于用戶例如通過導航離開該應用、關閉瀏覽器等而暫停他或她與應用的交互的時間。在其他情況下,用戶可明確地指令狀態(tài)捕捉模塊404存儲應用的當前狀態(tài),但是用戶可繼續(xù)與應用交互。在任何情況下,狀態(tài)捕捉模塊404將當前狀態(tài)表達為當前狀態(tài)鏡像,并且將當前狀態(tài)鏡像存儲在目的地數(shù)據(jù)存儲庫406中。
狀態(tài)恢復模塊408通過從目的地數(shù)據(jù)存儲庫406取回先前狀態(tài)鏡像來執(zhí)行第二功能。先前狀態(tài)鏡像對應于由狀態(tài)捕捉模塊404在某一更早時間創(chuàng)建的當前狀態(tài)鏡像。狀態(tài)恢復模塊408然后將應用恢復到由先前狀態(tài)鏡像表達的狀態(tài)。
返回到圖1,SMM 402的第一實例118調用它的狀態(tài)捕捉模塊404以存儲應用的當前狀態(tài)。這一操作產生當前狀態(tài)鏡像122,其反映應用在時間t0的狀態(tài)。SMM 402的第一實例118可將當前狀態(tài)鏡像122存儲在本地數(shù)據(jù)存儲庫124中、或將當前狀態(tài)鏡像122存儲在遠程數(shù)據(jù)存儲庫126中,或將當前狀態(tài)鏡像122存儲在本地數(shù)據(jù)存儲庫124和遠程數(shù)據(jù)存儲庫126兩者中。遷移管理模塊(MMM)128可管理遠程數(shù)據(jù)存儲庫126中的狀態(tài)信息的存儲和取回以及其他管理功能。在一種情況下,MMM 128和遠程數(shù)據(jù)存儲庫126被與特定應用相關聯(lián)的實體管理。在另一情況下,MMM 128和遠程數(shù)據(jù)存儲庫126提供用于由多個應用或所有應用使用的服務。
在比t0更晚的時間t1處,SMM 402的第二實例120調用它的狀態(tài)恢復模塊408。更具體而言,假定第二計算設備108不同于第一計算設備104。在該情況下,SMM 402的第二實例120可從遠程數(shù)據(jù)存儲庫126取回當前狀態(tài)鏡像122。備選地,假定第二計算設備108與第一計算設備104相同。在該情況下,SMM 402的第二實例120可從本地數(shù)據(jù)存儲庫130取回當前狀態(tài)鏡像,順帶提及,本地數(shù)據(jù)存儲庫130與本地數(shù)據(jù)存儲庫124相同。備選地,SMM 402的第二實例120可從遠程數(shù)據(jù)存儲庫126取回當前狀態(tài)鏡像122,如果其已被存儲在那里的話。例如,在一些同設備恢復的情形中,應用提供者和/或用戶由于許多原因(例如,基于遠程數(shù)據(jù)存儲庫126與本地數(shù)據(jù)存儲庫124相比更安全并且/或者免于損壞的看法)而可能更喜歡將當前狀態(tài)鏡像122存儲在遠程數(shù)據(jù)存儲庫126中(并且稍后從其取回)。在其他環(huán)境中,應用提供者和/或用戶可能得出相反結論,從而因此更喜歡將當前狀態(tài)鏡像122存儲在本地數(shù)據(jù)存儲庫124中。(重申,然而,為了不不適當?shù)厥挂韵抡f明復雜化,此后將主要假定第二計算設備108與第一計算設備104不同,在這種情況下SMM 402的第二實例120將從遠程數(shù)據(jù)存儲庫126取回當前狀態(tài)鏡像122)。SMM 402的第二實例120然后可使用它的狀態(tài)恢復模塊408以基于由當前狀態(tài)鏡像122(其現(xiàn)在可被稱為先前狀態(tài)鏡像)傳授的狀態(tài)信息來將應用恢復到它的暫停狀態(tài)。用戶然后可使用第二計算設備108繼續(xù)與應用交互。
從用戶體驗的視角,用戶將感知到應用在其在第一計算設備104處被中斷的相同接合點處在第二計算設備108處恢復。例如,如果用戶正在玩游戲,由游戲呈現(xiàn)的動作、游戲的分數(shù)狀態(tài)以及游戲的狀態(tài)的所有其他方面將從游戲在第一計算設備104處曾被暫停處的接合點起恢復。
一個或多個網(wǎng)絡132將上述組件通信地耦合在一起。一個或多個網(wǎng)絡132可對應于局域網(wǎng)、廣域網(wǎng)(例如,因特網(wǎng))、點對點連接等或這些的任何組合。
最后,圖1用數(shù)字來注釋環(huán)境102內的某些路徑,從而反映操作的例示性且非限制性的順序。其他實現(xiàn)方式可諸如通過省略一個或多個指定步驟和/或添加一個或多個新步驟、改變一個或多個指定步驟的次序等來改變所圖示的操作順序的一個或多個方面。
在第一操作(1)中,第一計算設備104從遠程應用源116接收應用的第一實例106。如不久將被闡明的,SMM 402的第一實例118可被與應用的第一實例106一起接收作為庫模塊。因此,在這一情形中,執(zhí)行環(huán)境112作為第一操作(1)的結果而接收與應用的第一實例一起的SMM的第一實例118。在另一實現(xiàn)方式中,SMM 402的第一實例表示例如與第一執(zhí)行環(huán)境112的穩(wěn)定資源對應的第一執(zhí)行環(huán)境112的已經(jīng)存在的組件。
更具體而言,在操作(1)中,第一執(zhí)行環(huán)境112可向應用源116請求期望的應用。環(huán)境102內的某一實體然后可確定關于考慮中的特定應用以及關于考慮中的特定用戶是否存在先前狀態(tài)鏡像。在這里假定不存在這樣的先前狀態(tài)鏡像。如果是這樣,則應用源116可以在不參考先前狀態(tài)的情況下遞送應用。執(zhí)行上述狀態(tài)檢查操作的實體可對應于應用源116、MMM 128、第一執(zhí)行環(huán)境112等或這些的任何組合。
在操作(2)中,SMM 402的第一實例118捕捉時間t0處的當前狀態(tài)。時間t0可對應于用戶已經(jīng)暫停應用的操作的時間點。SMM 402然后將對應的當前狀態(tài)鏡像122存儲在遠程數(shù)據(jù)存儲庫126中,和/或根據(jù)操作(2')存儲在本地數(shù)據(jù)存儲庫124中。
作為操作(2)的一部分,SMM 402還可存儲指示當前狀態(tài)鏡像122現(xiàn)在存在的信息。例如,SMM 402可將標識對應的當前狀態(tài)鏡像122的存在的cookie等存儲在第一計算設備104的本地數(shù)據(jù)存儲庫124中。附加地或者備選地,SMM 402可在應用源116處和/或在MMM128處存儲指示(針對特定應用,以及針對特定用戶的)當前狀態(tài)鏡像122的存在的條目。狀態(tài)檢查操作可稍后參考上述信息以確定針對特定應用并且針對考慮中的特定用戶的當前狀態(tài)鏡像122的存在或者不存在。
在操作(3)中,第二計算設備108的第二執(zhí)行環(huán)境114發(fā)起應用的第二示例110的復活(resurrection)。例如,響應于用戶對應用的調用,第二執(zhí)行環(huán)境114可向應用源116請求應用。環(huán)境102內的某一實體(例如,應用源116、MMM 128、第二執(zhí)行環(huán)境114等)然后可執(zhí)行上述的相同狀態(tài)檢查操作。例如,應用源116可基于存儲在第二計算設備108上的本地cookie和/或基于由應用源116和/或MMM128保持的遠程存儲的信息等來做出這一確定。在這一情形中,應用源116將確定當前狀態(tài)鏡像122存在(其在此時可被視為先前狀態(tài)鏡像)。
在操作(4)中,第二執(zhí)行環(huán)境114基于當前狀態(tài)鏡像122來啟動應用,而非在不參考先前狀態(tài)的情況下重新啟動應用。第二執(zhí)行環(huán)境114可以按照不同方式執(zhí)行以上任務。不帶限制地,在一種非限制性方式中,應用源116可將應用存根(stub)遞送給第二執(zhí)行環(huán)境114,或者以其他方式使應用存根對第二執(zhí)行環(huán)境114可用。第二執(zhí)行環(huán)境114可首先使用由應用存根提供的信息來對SMM 120的第二實例120實例化。備選地,如上所述,第二執(zhí)行環(huán)境114可能已經(jīng)包含SMM 402的第二實例120作為穩(wěn)定資源。應用存根還可提供允許SMM 402的第二實例120訪問當前狀態(tài)鏡像122的信息。例如,應用存根可包含指向當前狀態(tài)鏡像122的指針。SMM 402的第二實例120可使用該指針來從遠程數(shù)據(jù)存儲庫126和/或本地數(shù)據(jù)存儲庫130取回當前狀態(tài)鏡像122。在另一情況下,應用存根可自身包含當前狀態(tài)鏡像122的副本。無論用何種方式被獲得,SMM 402的第二實例120然后基于當前狀態(tài)鏡像122來恢復應用的狀態(tài)。
從高級立場,圖1中使用的SMM 402關于應用在執(zhí)行環(huán)境(諸如執(zhí)行環(huán)境(112,114))中的執(zhí)行而非關于由應用所運行于的底層計算設備執(zhí)行的所有功能的操作來捕捉和恢復應用的狀態(tài)。例如,SMM 402在不考慮執(zhí)行環(huán)境與計算設備的底層操作系統(tǒng)和核心硬件資源交互的方式的底層細節(jié)的情況下捕捉和恢復應用的狀態(tài)。因此,SMM 402在與由運行SMM 402的計算設備提供的硬件或操作系統(tǒng)接口相比更高層次的抽象上操作。
SMM 402可通過利用高級執(zhí)行環(huán)境的隔離相關的特性來表達與高級執(zhí)行環(huán)境的操作有關的應用的狀態(tài)。例如,考慮如下具體示例:其中執(zhí)行環(huán)境對應于主要被設計用來運行web應用的瀏覽器?,F(xiàn)代瀏覽器通常將不會給與應用對底層計算設備的核心資源的無阻礙的訪問,至少不以與允許傳統(tǒng)應用經(jīng)由操作系統(tǒng)與資源交互的方式相同的方式。換言之,為了提升安全性和其他目的,瀏覽器在與以傳統(tǒng)方式在計算設備上運行的應用相比更受限制的信任域中操作。SMM 402利用由瀏覽器提供的隔離以如應用向瀏覽器而非整個底層計算設備顯現(xiàn)那樣定義應用的基線狀態(tài)。例如,如由SMM 402捕捉的當前狀態(tài)不考慮瀏覽器自身如何與底層計算設備的操作系統(tǒng)交互。
許多益處可隨著SMM 402的以上特性而產生。例如,與描述底層計算設備的整體操作的狀態(tài)相比,當前狀態(tài)鏡像122可具有小得多的大小。例如,與由傳統(tǒng)虛擬機機制產生的鏡像相比,當前狀態(tài)鏡像122可具有小得多的大小。第二,作為有關益處,SMM 402可以與由傳統(tǒng)虛擬機機制產生的大得多的鏡像相比,按照更高效地方式創(chuàng)建、轉移和恢復當前狀態(tài)鏡像122。例如,計算設備可以通過許多類型的商業(yè)通信鏈路(諸如蜂窩鏈路)來快速地傳輸當前狀態(tài)鏡像122;對于由傳統(tǒng)虛擬機機制產生的鏡像,這么做將是不可能的。第三,當前狀態(tài)鏡像122與由傳統(tǒng)虛擬機機制產生的鏡像相比更不復雜。因為更不復雜,所述當前狀態(tài)鏡像122可以更不易于錯誤地表示應用的狀態(tài),例如,由于未能考慮到影響應用的恢復的依賴關系。
最后,SMM 402可被實現(xiàn)為以與任何其他庫模塊相同的方式在執(zhí)行環(huán)境(例如,瀏覽器)上運行的代碼。這一特性促進了SMM 402的部署和管理。相比之下,傳統(tǒng)的虛擬機機制使用管理程序(等)來恰當?shù)夭蹲降讓佑嬎阍O備的狀態(tài)。另外,在一些實現(xiàn)方式中,環(huán)境102可以在不要求用戶執(zhí)行對執(zhí)行環(huán)境的手動修改的情況下部署SMM402。然而,如上所述,在其他情況下,SMM 402可表示例如通過向執(zhí)行環(huán)境添加新模塊而產生的執(zhí)行環(huán)境的穩(wěn)定資源。
以上潛在益處以示例而非限制的方式被引證;SMM 402可提供未在上面提到的附加益處。
圖2圖示了一個實施例,其中SMM 402對應于SMM庫模塊202,例如,對應于被組織為一個或多個代碼單元的實現(xiàn)SMM 402的代碼。執(zhí)行環(huán)境運行SMM庫模塊202以產生SMM 402的實例化。應用自身的功能由應用代碼模塊204實現(xiàn)。執(zhí)行環(huán)境運行應用代碼模塊204以產生應用的實例。SMM庫模塊202和應用代碼模塊204共同對應于應用相關的代碼206。
在一種情況下,應用源116可提供SMM庫模塊202和應用代碼模塊204兩者。在另一情況下,遷移管理模塊(MMM)128可提供SMM庫模塊202,并且應用源116可提供應用代碼模塊204。在另一情況下,MMM 128可將SMM庫模塊202提供給應用源116,應用源116轉而將其提供給執(zhí)行環(huán)境,諸如此類。
在一種情況下,至少一個源將SMM庫模塊202和應用代碼模塊204作為單個包提供給執(zhí)行環(huán)境。在另一情況下,任何源將SMM庫模塊202提供給執(zhí)行環(huán)境,并且然后同一源或者不同源將應用代碼模塊204提供給執(zhí)行環(huán)境,或者反之亦然。
以上闡明的原理在不同的技術環(huán)境中可以不同方式被實現(xiàn)。在圖1的一種例示性且非限制性的實現(xiàn)方式中,假定執(zhí)行環(huán)境(112,114)是瀏覽器。在該情況下,應用可由與單個起源相關聯(lián)的代碼的單個模塊實現(xiàn)。應用定義的代碼可位于單個HTML框架內。SMM模塊402可由也在該框架中運行的庫表示,并且可被從與應用定義的代碼相同的源或者不同源獲得。備選地,如在上面提到的,SMM模塊402可由瀏覽器自身實現(xiàn)。一般而言,框架對應于代碼所運行于的執(zhí)行情境,并且此后被以該一般意義提及。
在另一情況下,應用可對應于與不同域相關聯(lián)的應用代碼模塊的集合體(conglomerate)。執(zhí)行環(huán)境可使用各個不同的框架來運行不同的代碼模塊。例如,考慮應用對應于web應用的情況。該應用使由不同代碼模塊實現(xiàn)的兩個或更多個單獨服務聚集在一起。不同的代碼模塊可源自一個或多個各個不同的應用源,或者至少部分地源自同一應用源。例如,“主要”應用代碼模塊可向用戶遞送社交網(wǎng)絡服務。用戶可經(jīng)由該應用提供的用戶界面呈現(xiàn)的主要部分與該服務交互。第二應用代碼模塊可向用戶遞送廣告。用戶可經(jīng)由用戶界面呈現(xiàn)的周圍區(qū)域與該補充服務交互。
圖3示出了經(jīng)由三個應用代碼模塊(302,304,306)將用戶體驗提供給用戶的應用的實現(xiàn)方式。執(zhí)行環(huán)境(在這一示例中為瀏覽器)在三個相應的框架(框架1,框架2,和框架3)中運行三個應用代碼模塊(302,304,306)。每個框架構成具有獨立于其他框架的狀態(tài)的狀態(tài)。因此,SMM 402通過分離地捕捉每個獨立框架的狀態(tài)來捕捉這一種類的應用的狀態(tài)。對三個應用代碼模塊(302,304,306)和關聯(lián)的框架的使用僅僅是代表性的;應用可包括任何數(shù)目的應用代碼模塊。
為了特定于框架地捕捉狀態(tài),環(huán)境102可以使第一SMM庫模塊308與第一應用代碼模塊302相關聯(lián)、使第二SMM庫模塊310與第二應用代碼模塊304相關聯(lián)以及使第三SMM庫模塊312與第三應用代碼模塊306相關聯(lián)。應用代碼模塊(302,304,306)和SMM庫模塊(308,310,312)的集合共同對應于應用相關的代碼314??梢园凑找陨详P于圖2的單框架示例規(guī)定的任何方式將每個庫模塊提供給執(zhí)行環(huán)境。
每個SMM庫模塊使負責捕捉和恢復與特定應用代碼模塊相關聯(lián)的狀態(tài)的SMM的版本實例化。也就是說,第一SMM庫模塊308捕捉和存儲關于第一應用代碼模塊302的狀態(tài)信息,第二SMM庫模塊310捕捉和存儲關于第二應用代碼模塊304的狀態(tài)信息,并且第三SMM庫模塊312捕捉和存儲關于第三應用代碼模塊305的狀態(tài)信息。另外,SMM庫模塊308可用作用于整個應用的SMM 402的頂層實例。當被調用時,頂層SMM庫模塊308關于應用代碼模塊302執(zhí)行它的SMM相關的功能,并且還可指令其他SMM庫模塊(310,312)關于它們的相應的應用代碼模塊(304,306)執(zhí)行它們的SMM相關的功能。但是所有的庫模塊(308,310,312)以其他方式以獨立方式執(zhí)行它們的操作(因為框架的狀態(tài)是自身獨立的)。
為了簡化以下說明,剩余描述將假定應用由與單個框架相關聯(lián)的單個應用模塊組成(換言之,單個執(zhí)行情境)。但是下面提出的相同處理操作可以被關于應用的多個框架的多個庫模塊復制。作為另一簡化假設,本描述將考慮每個框架是單線程的情形,從而意味著在任何給定時間只有一個調用鏈是活動的(從而使得多個線程并不并行地改變應用的狀態(tài))。
在這一介紹章節(jié)的最后,圖5示出了對SMM 402的狀態(tài)捕捉模塊404的操作進行概述的過程502。在方框504中,狀態(tài)捕捉模塊404標識與應用相關聯(lián)的當前狀態(tài)。在一種情況下,方框502由用戶用來關閉應用的決定(例如,通過導航離開支持web的應用(例如,通過關閉被指派給該應用的標簽),或者通過關閉整個瀏覽器)觸發(fā)。在另一情況下,用戶可明確地指令狀態(tài)捕捉模塊404以捕捉應用的狀態(tài)。例如,在圖7的情形中,由應用提供的用戶界面呈現(xiàn)702呈現(xiàn)暫停控制按鈕704等。用戶可激活該控制按鈕704以指令狀態(tài)捕捉模塊404標識當前狀態(tài)。該指令可以與關閉整個應用的指令一致或者可以不與其一致。
在方框506中,狀態(tài)捕捉模塊404將標識的狀態(tài)表達為當前階段鏡像。在方框508中,狀態(tài)捕捉模塊404將當前狀態(tài)鏡像存儲在諸如本地數(shù)據(jù)存儲庫124和/或遠程數(shù)據(jù)存儲庫126之類的至少一個目的地數(shù)據(jù)存儲庫中。狀態(tài)捕捉模塊404還在本地和/或遠程地存儲當前狀態(tài)鏡像已被創(chuàng)建的指示。章節(jié)B提供了關于狀態(tài)捕捉模塊404的操作的更多例示性細節(jié)。
圖6示出了過程602,其概述了環(huán)境102可恢復應用的狀態(tài)的方式。在方框604中,調用應用的請求被接收(例如,被應用源116)。在方框606中,環(huán)境102內的某一實體(諸如應用源116)確定針對應用先前狀態(tài)鏡像是否存在。該實體可以按照上述的不同方式檢測先前狀態(tài)鏡像的存在。
在方框608中,第二執(zhí)行環(huán)境114取回先前狀態(tài)鏡像,無論其被存儲在何處。第二執(zhí)行環(huán)境114可以按照上述的不同方式執(zhí)行這一操作。在一種方法中,第二執(zhí)行環(huán)境114從應用源116接收應用存根,這允許其使狀態(tài)恢復模塊408實例化。狀態(tài)恢復模塊408然后使用由應用存根提供的信息以取回先前狀態(tài)鏡像。在方框610中,狀態(tài)恢復模塊408使用先前狀態(tài)鏡像恢復如由狀態(tài)捕捉模塊404捕捉的應用的狀態(tài)。用戶然后可從應用被暫停處的同一接合點恢復應用的操作。章節(jié)C提供了關于狀態(tài)恢復模塊408的操作的更多例示性細節(jié)。
B.狀態(tài)捕捉模塊
圖8示出了在章節(jié)A中介紹的當前狀態(tài)鏡像122的一種實現(xiàn)方式。當前狀態(tài)鏡像122表達了應用在該應用被暫停時的狀態(tài),或者應用在狀態(tài)捕捉指令以其他方式被接收到時的狀態(tài)。
當前狀態(tài)鏡像122可包括存儲關于應用的不同方面的信息的不同部分。關于術語,應用的特定方面在此被稱為應用的特征。描述該特征的狀態(tài)信息的實例被稱為元素或者狀態(tài)元素。狀態(tài)捕捉模塊404關于應用的每個特征執(zhí)行兩個基本任務。第一,狀態(tài)捕捉模塊404使用某一技術以用于檢測它的存在和狀態(tài)。第二,狀態(tài)捕捉模塊404使用某一技術以表達該狀態(tài)。
為了有助于說明,以下說明將給出其中應用是用編寫的詳細示例。是作為許多支持web的應用中的共同特征的面向對象的腳本語言。然而,SMM 402可以對以諸如語言之類的其他語言表達的其他類型的程序操作。和兩者均具有在應用的執(zhí)行期間發(fā)現(xiàn)應用的對象的屬性的能力。語言的該能力被稱為內省或反射(其中反射意味著用于修改被發(fā)現(xiàn)的對象的屬性的進一步能力)。SMM 402可以按照下述方式利用編程語言的內省/反射能力。
首先,當前狀態(tài)鏡像122可包括描述堆相關的特征的堆相關的狀態(tài)信息802。如在圖11中示出的,堆存儲器1102指的是計算設備的主存儲器的在應用的執(zhí)行期間被分配用于存儲由應用調用的特征的一部分。也就是說,堆存儲器1102中的特征對應于由應用的代碼定義的特征的實例化。堆存儲器1102中的每個特征可具有一組屬性。每個特征還可具有與一個或多個其他特征的關系;堆存儲器1102可通過將特征表達為圖結構內的節(jié)點來表示兩個或更多個特征之間的關系。在操作中,加載過程當在應用的執(zhí)行期間需要特征時將特征存儲在堆存儲器1102中。垃圾回收過程可周期性地移除不再被應用使用的特征。
在的特殊且非限制性的情況下,特征可包括從原型函數(shù)對象得到的函數(shù)對象(在下面為了簡潔而被簡稱為“函數(shù)”)以及從原型非函數(shù)對象得到的非函數(shù)對象(在下面為了簡潔而被簡稱為“對象”)。更具體而言,對象和函數(shù)的子集可由應用自身定義,并且因此在下面被稱為應用定義的對象和應用定義的函數(shù)。對象和函數(shù)的另一子集由運行應用的執(zhí)行環(huán)境(例如,瀏覽器)定義的,并且因此在下面被稱為環(huán)境定義的對象和環(huán)境定義的函數(shù)。執(zhí)行環(huán)境和應用還可定義“原語”值,諸如數(shù)字和布爾值。因此,堆存儲器1102除可包含函數(shù)值和對象值之外還可包含原語值。
更具體而言,考慮堆存儲器1102在應用執(zhí)行之前的狀態(tài)。堆存儲器1102將僅包含環(huán)境定義的特征1104。環(huán)境定義的特征1104對應于任何應用可用來提供它的服務的共同資源。例如,一些環(huán)境定義的特征可提供允許應用與遠程實體交互的功能等。環(huán)境定義的特征1104在實際應用中可對應于標識相應資源的路徑,而非資源本身。
隨后,當應用執(zhí)行并需要使用應用定義的特征1106時,應用將這些特征加載到堆存儲器1102中。應用定義的特征1106對應于正在運行的應用所特有的對象和函數(shù)。應用定義的特征中的一些可引用環(huán)境定義的特征,如由圖11中示出的引用1108所反映的。
回到圖8,堆相關的元素的第一集合可描述環(huán)境定義的對象和函數(shù)。堆相關的元素的第二集合可描述應用定義的對象和函數(shù)。如將在下面描述的,與應用定義的特征相比,狀態(tài)捕捉模塊404可使用不同的技術以標識和表達環(huán)境定義的特征。
如在上面提到的,環(huán)境定義的特征反映可被任何應用使用的功能,并且因而跨不同瀏覽器是共用的。因此,當捕捉應用自身的狀態(tài)時,可能似乎可以省略這一信息。然而,應用可能以不同方式影響環(huán)境定義的特征。例如,應用可以向環(huán)境定義的特征添加功能,和/或修改環(huán)境定義特征的圖等。應用定義的對象也可指代一個或多個環(huán)境定義的對象。狀態(tài)捕捉模塊404捕捉環(huán)境定義的特征的狀態(tài)以便檢測以上類型的特定于應用的引用和修改;否則,狀態(tài)恢復模塊408在正確地恢復應用的狀態(tài)時可能是不成功的。
在一種情形中,捕捉階段執(zhí)行環(huán)境(例如,圖1中示出的第一執(zhí)行環(huán)境112)可能與恢復階段執(zhí)行環(huán)境(例如,圖1的第二執(zhí)行環(huán)境114)相同。例如,兩個執(zhí)行環(huán)境(112,114)均可對應于由微軟公司提供的IE瀏覽器。在另一情況中,環(huán)境(112,114)可以不同。在后者的情況中,在恢復時,狀態(tài)恢復模塊408可以附加地轉換在當前狀態(tài)鏡像122中表達的環(huán)境定義的特征以使得它們與由目標執(zhí)行環(huán)境使用的無論什么原生功能兼容。
繼續(xù)對圖8的說明,當前狀態(tài)鏡像122還包括文檔相關的狀態(tài)信息804、定時器相關的狀態(tài)信息806、網(wǎng)絡相關的狀態(tài)信息808以及存儲相關的狀態(tài)信息810。關于文檔相關的狀態(tài)信息,瀏覽器可使用文檔對象模型(DOM)來表達應用的標記語言信息(例如,它的HTML)。文檔相關的狀態(tài)信息804描述與DOM樹相關聯(lián)的特征。DOM樹轉而將應用的標記代碼表示為節(jié)點的結構化集合。定時器相關的狀態(tài)信息806提供描述已被應用登記的定時器的元數(shù)據(jù)。網(wǎng)絡相關的狀態(tài)信息808描述涉及應用的進行中的網(wǎng)絡交互。并且存儲相關的狀態(tài)信息描述已被應用存儲在運行應用的計算設備的本地存儲設備上的信息。這樣的信息可包括cookie、經(jīng)由DOM存儲接口存儲的鍵/值數(shù)據(jù)等。上述類型的狀態(tài)信息以示例而非限制的方式被引用。其他實現(xiàn)方式可以提供附加類型的狀態(tài)信息。備選地或者附加地,其他實現(xiàn)方式可以省略上述的一個或多個類型的狀態(tài)信息。
下面將參考在圖9和圖10中示出的當前狀態(tài)鏡像902的具體示例來更詳細地描述上述類別的狀態(tài)信息。還假定當前狀態(tài)鏡像902表達用編寫的應用的狀態(tài)。然而,重申,本文中所陳述的原理擴展到其他編程語言(諸如但不限于等)。
環(huán)境定義的特征。狀態(tài)捕捉模塊404遍歷堆存儲器1102以標識包括環(huán)境定義的對象和環(huán)境定義的函數(shù)的環(huán)境定義的特征(例如,使用圖搜索,諸如廣度優(yōu)先搜索)。狀態(tài)捕捉模塊404為每個這樣的特征指派并且存儲唯一標識符。狀態(tài)捕捉模塊404可將環(huán)境定義的特征的值表達為與引用環(huán)境定義的對象的路徑對應的字符串。圖9示出了當前狀態(tài)鏡像902包括用于存儲關于環(huán)境定義的對象的信息的部分904和用于存儲關于環(huán)境定義的函數(shù)的信息的部分906。例如,環(huán)境定義的對象“window.localStorage”對應于表達與這一對象相關聯(lián)的路徑的字符串。
應用定義的對象。狀態(tài)捕捉模塊404利用(或者用來表達應用的任何其他語言)的內省/反射能力以標識應用定義的對象。更具體而言,狀態(tài)捕捉模塊404對堆存儲器1102中的包含應用定義的對象的圖執(zhí)行圖搜索(例如,廣度優(yōu)先搜索)以標識應用定義的對象和它們的屬性。在發(fā)現(xiàn)對象之后,狀態(tài)捕捉模塊404向其指派唯一ID。如果狀態(tài)捕捉模塊404在其對在堆存儲器1102中提供的信息的遍歷中再一次發(fā)現(xiàn)相同對象,則它將忽略該對象(因為它已經(jīng)向該對象指派了唯一ID)。
在一些情況下,一個對象可以引用另一個。例如,一個應用定義的對象可具有引用另一對象Z的屬性X.Y。為了解決這一情況,狀態(tài)捕捉模塊404可以表示當前狀態(tài)鏡像902中的對象之間的聯(lián)系。例如,假定對象No.753通過屬性c引用對象No.752。當前狀態(tài)鏡像902提供引用908,其例如通過與屬性c相關聯(lián)地存儲對象No.752的ID來記憶這些對象之間的關系。
在一種實現(xiàn)方式中,狀態(tài)捕捉模塊404使用JSON格式來以序列化形式表達應用定義的對象。JSON標準在RFC 4627和ECMA-404中被描述。然而,JSON未提供用于使原生對象和函數(shù)序列化的技術。因此,狀態(tài)捕捉模塊404使用定制技術來表達這些特征,如下所述。
總體上,當前狀態(tài)鏡像902包括存儲應用定義的對象的部分910以及存儲應用定義的函數(shù)的部分912。地圖914描述與當前狀態(tài)相關聯(lián)的所有對象,包括環(huán)境定義的對象和應用定義的對象。地圖916描述與當前狀態(tài)相關聯(lián)的所有函數(shù),包括環(huán)境定義的函數(shù)和應用定義的函數(shù)。頭部信息918描述部分910和912的起點。
應用定義的原生對象。原生對象指的是作為由編程語言庫提供的原生功能的實例化的應用定義的對象。例如,一個原生對象可對應于RegExp對象,其表示由提供的正則表達式功能的實例化。狀態(tài)捕捉模塊404可以使用不同的特定于類的變換器(transducer)來表達這些類型的對象。例如,考慮基于由編程語言提供的原生功能以表達日期的原生對象。狀態(tài)捕捉模塊404可以將這一對象轉換為整數(shù),該整數(shù)表示從基準時間開始已經(jīng)發(fā)生的秒數(shù)。
應用定義的函數(shù)。狀態(tài)捕捉模塊404可以使用的預先定義的toString()方法以標識與應用定義的函數(shù)相關聯(lián)的源代碼。狀態(tài)捕捉模塊404然后可以利用語言的內省/反射能力以標識應用定義的函數(shù)的屬性。例如,在當前狀態(tài)鏡像902的部分912中,注意到第一應用定義的函數(shù)被指派ID No.362。該函數(shù)具有與變量“i”相關聯(lián)的整數(shù)屬性。如由虛線所指示,當前狀態(tài)鏡像902中的許多其他狀態(tài)元素引用了應用定義的函數(shù)No.362。
然而,狀態(tài)捕捉模塊404無法自己使用以上技術以發(fā)現(xiàn)與閉包狀態(tài)相關聯(lián)的函數(shù)。更具體而言,考慮圖12中示出的情形,其中內函數(shù)1202被嵌入或嵌套在外函數(shù)1204中。另外假定內函數(shù)1202引用由外函數(shù)1204定義的變量(例如,變量X)。嵌套的內函數(shù)1202是閉包的示例。外函數(shù)1204建立與閉包相關聯(lián)的閉包創(chuàng)建范圍。狀態(tài)捕捉模塊404使用上述toString()方法無法發(fā)現(xiàn)閉包關系;更具體而言,該方法將僅返回內函數(shù)的源代碼。
為了解決以上問題,狀態(tài)捕捉模塊404可以首先標識例如與在圖12中示出的函數(shù)的嵌套關系對應的閉包創(chuàng)建范圍。狀態(tài)捕捉模塊404然后可以靜態(tài)地重寫圖12中示出的代碼,以按照使閉包變量顯式的方式產生新的內函數(shù)1202'和新的外函數(shù)1204'。更具體而言,狀態(tài)捕捉模塊404可以創(chuàng)建顯式對象1206,其具有表示閉包變量的屬性。狀態(tài)捕捉模塊404按照其被強迫通過新的顯式閉包對象1206訪問閉包狀態(tài)的方式來重寫嵌套的內函數(shù)1202'。更具體而言,狀態(tài)捕捉模塊404可將顯式對象1206指派為嵌套的內函數(shù)1202'的函數(shù)屬性。利用上述改變,狀態(tài)捕捉模塊404現(xiàn)在能夠恰當?shù)匕l(fā)現(xiàn)和表達與內函數(shù)1202'和外函數(shù)1204'相關聯(lián)的閉包關系。
DOM樹特征。如上所述,瀏覽器可使用由節(jié)點的結構構成的DOM樹以表達應用的組成代碼(makeup code),諸如它的HTML元素。每個這樣的節(jié)點具有描述節(jié)點的特性的屬性,諸如它的CSS式樣、它的父代(如有的話)、它的子代(如有的話)等。另外,應用可使事件處理器與DOM樹中的任何節(jié)點相關聯(lián)。例如,應用可使事件處理器關聯(lián)于指向特定DOM節(jié)點的檢測鍵盤或鼠標輸入事件。再另外,應用可例如通過向節(jié)點指派定制的“<canvas>”屬性來使定制屬性與任何DOM節(jié)點相關聯(lián)。
狀態(tài)捕捉模塊404可以向每個DOM節(jié)點指派唯一的ID。另外,狀態(tài)捕捉模塊404可以使用現(xiàn)有功能(例如,由流行的瀏覽器提供的現(xiàn)有XML序列化器接口)將每個DOM節(jié)點轉換為HTML,以及將該HTML作為用于DOM節(jié)點的狀態(tài)元素存儲在當前狀態(tài)鏡像902的部分920中。但是,XML序列化器功能不捕捉事件處理器以及與節(jié)點相關聯(lián)的其他定制屬性的存在。
暫時前進到圖13,首先考慮由事件處理器呈現(xiàn)的挑戰(zhàn)。假定瀏覽器提供登記事件處理器的原始功能1302。使用內省技術,狀態(tài)捕捉模塊404可以提供監(jiān)視功能1304,其檢測何時應用在它的執(zhí)行的過程中創(chuàng)建事件處理器以提供監(jiān)視信息。SMM 402在評估應用的狀態(tài)時可以咨詢監(jiān)視信息。例如,監(jiān)視信息可標識事件處理器的存在,其轉而與定義它的調用方式的特定函數(shù)相關聯(lián)。狀態(tài)捕捉模塊404可以按照與任何其他應用定義的函數(shù)相同的方式使該函數(shù)序列化。
狀態(tài)捕捉模塊404可以將狀態(tài)信息存儲在部分920的結尾處(如在圖10中示出),這反映了與DOM樹中的節(jié)點相關聯(lián)的任何事件處理器的存在。例如,圖10指示事件處理器與“div”節(jié)點相關聯(lián),并且指示這一事件處理器也與應用定義的函數(shù)No.362相關聯(lián)。
應用可例如通過傳遞對與事件處理器相關聯(lián)的函數(shù)的引用來稍后移除事件處理器。圖13的監(jiān)視功能1304也可用來例如通過利用監(jiān)視功能1304隱喻地(metaphorically)包裝瀏覽器的事件取消等級功能來發(fā)現(xiàn)事件處理器的移除。在檢測到處理器移除事件之后,假定當前狀態(tài)鏡像902已被先前修改為反映事件處理器的存在,則監(jiān)視功能1304可以從當前狀態(tài)鏡像902移除對應的條目。
如將在下面描述并且如在圖13中指示的,SMM 402可以應用“插入(interpositioning)”以觀察除事件處理器的創(chuàng)建和移除之外的其他類型的狀態(tài)。一般而言,插入過程利用執(zhí)行環(huán)境提供的內省和反射能力。然而,SMM 402可針對各個不同的不同類型的狀態(tài)應用不同的具體插入方法。
接下來考慮由與DOM節(jié)點相關聯(lián)的定制屬性呈現(xiàn)的挑戰(zhàn)。狀態(tài)捕捉模塊404可以利用應用語言的內省/反射能力以發(fā)現(xiàn)與DOM節(jié)點相關聯(lián)的定制屬性。狀態(tài)捕捉模塊404然后可以創(chuàng)建將定制屬性鏈接到它們所關聯(lián)于的節(jié)點的引用。例如,圖9和圖10的部分920示出了定制屬性被鏈接到“<canvas>”節(jié)點。更具體而言,“<canvas>”標簽允許應用創(chuàng)建位映像的鏡像。因為XML序列化器不捕捉位圖,因此狀態(tài)捕捉模塊404可顯式地使其序列化并將由此得到的數(shù)據(jù)存儲作為當前狀態(tài)鏡像902內部的字符串。在圖10中,與DOM特征No.3相關聯(lián)的“<canvas>”標簽將數(shù)據(jù)表達為十六進制的“83ff01ac...”。
定時器。應用可以向執(zhí)行環(huán)境登記定時器回調。超時型定時器在指定延遲之后啟動(fire)一次。間隔型定時器基于指定的周期性而重復地啟動。狀態(tài)捕捉模塊404可以使用在圖13中示出的方式來檢測何時應用登記定時器。狀態(tài)捕捉模塊404然后可以按照與任何其他應用定義的函數(shù)相同的方式使關聯(lián)的定時器函數(shù)序列化。更具體而言,如對定時器登記接口執(zhí)行的插入可使得需要保存到真實(原生)定時器登記操作的引用,以及然后將登記操作重新定義為記錄關于定時器的信息并隨后調用原始登記操作的操作。(如對事件登記接口執(zhí)行的插入以相同方式工作)
監(jiān)視功能1304存儲的信息包括與已被調用的定時器有關的元數(shù)據(jù)。該元數(shù)據(jù)可以描述已被調用的定時器的類型(例如,超時型定時器或間隔型定時器等)。元數(shù)據(jù)還可以描述在應用的恢復之后到定時器將啟動為止的時間量。對于間隔型定時器,元數(shù)據(jù)還描述定時器的周期性。
例如,圖14示出了上一次在時間1402處啟動或者曾在時間1402處被發(fā)起的定時器。假定應用在時間1404處被暫停。另外假定定時器原來被調度以在時間1406處啟動,并且假定時間間隔1408使時間1406與時間1408分開。狀態(tài)捕捉模塊404也可存儲時間間隔1408。對于間隔型定時器,狀態(tài)捕捉模塊404還可以存儲描述其周期性的間隔1410。在應用的恢復之后,狀態(tài)恢復模塊408指令執(zhí)行環(huán)境在間隔1408中表達的時間量已經(jīng)期滿之后啟動定時器,并且此后按照由時間間隔1410表達的周期性重復地啟動。
如在圖10中示出的,狀態(tài)捕捉模塊404可以將定時器相關的狀態(tài)信息存儲在當前狀態(tài)鏡像902的部分1002中。例如,注意到這一部分1002標識被調度以在恢復之后4秒啟動并且此后按照10秒的周期性的間隔型定時器。該定時器還與對應于具有ID No.362的應用定義的函數(shù)的回調函數(shù)相關聯(lián)。
(創(chuàng)建定時器的)定時器登記函數(shù)還可以提供表達取消ID的整數(shù)。應用可使用取消ID以經(jīng)由定時器取消函數(shù)取消定時器。狀態(tài)捕捉模塊404也可以存儲取消ID。另外,狀態(tài)捕捉模塊404可以使用在圖13中示出的監(jiān)視功能1304以確定何時應用已經(jīng)取消了定時器。狀態(tài)捕捉模塊404然后可以從當前狀態(tài)鏡像902移除對應的定時器狀態(tài)信息,如果其先前已被存儲的話。
另外,狀態(tài)捕捉模塊404按照補充并考慮到其對定時器登記函數(shù)的插入的方式執(zhí)行其對定時器取消函數(shù)的插入。憑借這一方式,狀態(tài)捕捉模塊404可以確保應用的取消定時器的請求被與待取消的定時器的身份正確地配對。例如,假定監(jiān)視功能1304創(chuàng)建了用來引用已被創(chuàng)建的定時器的新引用(例如,引用Z)。但是,假定執(zhí)行環(huán)境的其他組件使用另一引用(例如,引用Y)來引用該定時器。為了解決這一問題,狀態(tài)捕捉模塊404將執(zhí)行適當?shù)囊谜{整(swizzling)以確保引用Y被轉換為引用Z,并且反之亦然,從而使得正確的定時器被取消。狀態(tài)捕捉模塊404可以關于事件處理器的登記和注銷采用相同方法,以確保在應用的移除事件處理器的指令之后正確的事件處理器被移除。
盤存儲特征。應用在至少兩種情況中可經(jīng)由瀏覽器將信息存儲在計算設備的本地數(shù)據(jù)存儲庫上。在第一種情況中,應用可以將cookie存儲在本地數(shù)據(jù)存儲庫中。在第二種情況中,應用可以使用DOM存儲接口來存儲信息;這一接口將鍵/值抽象呈現(xiàn)給應用,并且允許應用存儲比由cookie接口允許的大得多的數(shù)據(jù)項。狀態(tài)捕捉模塊404可以按照作為名稱—值對的字符串的形式存儲cookie。狀態(tài)捕捉模塊404還可以按照作為一系列的鍵和值的字符串的形式使DOM存儲信息序列化。在圖10的情境中,狀態(tài)捕捉模塊404可以將cookie相關的狀態(tài)信息存儲在部分1004中,并且將DOM存儲相關的狀態(tài)信息存儲在部分1006中。
網(wǎng)絡相關的特征。應用可經(jīng)由諸如AJAX接口之類的若干機制與遠程實體(諸如由遠程服務器提供的另一web應用)交互。在這種情況下,應用可以創(chuàng)建新的XMLHttpRequest對象,其標識與遠程服務器相關聯(lián)的URL以及與請求相關聯(lián)的任何數(shù)據(jù)。瀏覽器然后使用對象中的信息來聯(lián)系遠程服務器。應用可以為對象創(chuàng)建事件處理器;瀏覽器在接收到來自遠程服務器的數(shù)據(jù)之后將調用這一處理器。
假定用戶在進行中的網(wǎng)絡交互的過程中暫停應用。狀態(tài)捕捉模塊404被配置為存儲表達運行中網(wǎng)絡連接并且允許狀態(tài)恢復模塊408恰當?shù)鼗謴途W(wǎng)絡交互的狀態(tài)信息。
在一種技術中,狀態(tài)捕捉模塊404再一次使用在圖13中示出的類型的監(jiān)視功能1304來“包裝”應用用來創(chuàng)建XMLHttpRequest對象的接口。更具體而言,監(jiān)視功能1304可為通過XMLHttpRequest接口創(chuàng)建的底層對象的多個方法和特征創(chuàng)建“包裝器代碼”。通過這么做,監(jiān)視功能1304可以標識進行中的網(wǎng)絡交互,包括與遠程服務器相關聯(lián)的URL以及由應用定義的任何網(wǎng)絡處理器。監(jiān)視功能1304可以記錄監(jiān)視對象中的所有這樣的信息。狀態(tài)捕捉模塊404可以將與監(jiān)視對象有關的信息存儲在當前狀態(tài)鏡像902的部分1008中。
在用來恢復應用的請求之后,狀態(tài)恢復模塊408可以提取在當前狀態(tài)鏡像902(其在此時構成先前狀態(tài)鏡像)中提供的狀態(tài)信息?;诓糠?008中的信息,狀態(tài)恢復模塊408確定是否存在任何進行中的網(wǎng)絡交互。狀態(tài)恢復模塊408然后可以使用存儲的信息重新啟動任何終止的網(wǎng)絡請求,例如,通過重新發(fā)送終止的網(wǎng)絡請求。
在許多情況下,應用使用REST式樣的協(xié)議來實現(xiàn)客戶端與服務器之間的交互。在這種情況下,不要求遠程服務器保持任何客戶端側狀態(tài);作為替代,期望客戶端保留狀態(tài)信息。使用REST協(xié)議的應用可以按照上面規(guī)定的方式暫停和恢復進行中的網(wǎng)絡連接,而沒有其他特殊規(guī)定。
在一些情況中,服務器可存儲客戶端的會話狀態(tài)。例如,假定遠程服務器使每個用戶會話與IP地址相關聯(lián)。還假定用戶在(與第一IP地址相關聯(lián)的)第一計算設備上暫停應用并且稍后在(與第二IP地址相關聯(lián)的)第二計算設備上恢復它。這樣的情況可能使對被暫停的交互的恢復復雜化。遷移功能可以按照諸如在圖15中示出的策略之類的不同方式解決這一情況。在這里,第一計算設備1502(應用在其上被暫停)和第二計算設備1504(應用在其上被恢復)被配置為與具有穩(wěn)定IP地址的委托代理1506交互。應用服務器1508通過委托代理1506的穩(wěn)定存在來與客戶端計算設備(1502 1504)交互。
圖16和圖17一起示出了過程1602,其概述了狀態(tài)捕捉模塊404的一種操作方式。在方框1604中,狀態(tài)捕捉模塊404標識由執(zhí)行環(huán)境(例如,瀏覽器)定義的堆相關的特征(例如,對象和函數(shù))。在方框1606中,狀態(tài)捕捉模塊404生成并存儲表達環(huán)境定義的堆相關的特征的信息。在方框1608中,狀態(tài)捕捉模塊404標識由應用自身定義的堆相關的特征(例如,對象和函數(shù))。在方框1610中,狀態(tài)捕捉模塊404生成并存儲與應用定義的堆相關的特征相關聯(lián)的狀態(tài)信息。
在方框1612中,狀態(tài)捕捉模塊404標識與DOM樹相關聯(lián)的特征,包括與DOM節(jié)點相關聯(lián)的事件處理器以及與DOM節(jié)點相關聯(lián)的其他定制屬性。在方框1614中,狀態(tài)捕捉模塊404生成并存儲用于DOM樹特征的狀態(tài)信息。
繼續(xù)到圖17,在方框1704中,狀態(tài)捕捉模塊404標識例如與被應用登記并且/或者稍后被應用取消的不同類型的定時器相關聯(lián)的定時器相關的特征。在方框1706中,狀態(tài)捕捉模塊404生成并存儲與定時器相關特征相關聯(lián)的狀態(tài)信息。
在方框1708中,狀態(tài)捕捉模塊404可以標識與被應用經(jīng)由瀏覽器存儲在計算設備的本地數(shù)據(jù)存儲庫中的信息相關聯(lián)的特征。這樣的信息可包括cookie、DOM相關的信息等。在方框1710中,狀態(tài)捕捉模塊404可生成并存儲與本地存儲相關的特征相關聯(lián)的狀態(tài)信息。
在方框1712中,狀態(tài)捕捉模塊404可以標識與諸如使用AJAX協(xié)議或者某一其他協(xié)議的網(wǎng)絡交互之類的進行中的網(wǎng)絡交互相關聯(lián)的特征。在方框1714中,狀態(tài)捕捉模塊404可以生成并存儲與網(wǎng)絡相關的特征相關聯(lián)的狀態(tài)信息。
狀態(tài)捕捉模塊404可以按照與在圖16和圖17中圖示的順序不同的順序(包括并行方式)來捕捉上述狀態(tài)信息。另外,與在圖16和圖17中標識的各類型的狀態(tài)信息相比,SMM 402的其他實現(xiàn)方式可以標識并存儲其他類型的狀態(tài)信息。因此,在圖16和圖17中描述的過程1602將被以例示而非限制的精神解釋。
C.狀態(tài)恢復模塊
圖18示出了過程1802,其表示圖4的狀態(tài)恢復模塊408的一種操作方式。一般而言,狀態(tài)恢復模塊408可以基于先前狀態(tài)鏡像來恢復應用。先前狀態(tài)鏡像對應于在應用被暫停時創(chuàng)建的當前狀態(tài)鏡像,但是其現(xiàn)在有資格作為“先前”以反映其在將應用恢復到其先前狀態(tài)時的角色。重申,SMM 402可調用與應用曾在其上被暫停的設備相比不同的計算設備上的狀態(tài)恢復模塊408。在這種情況中,狀態(tài)恢復模塊408可從遠程數(shù)據(jù)存儲庫126取回先前狀態(tài)鏡像。在另一情況中,狀態(tài)恢復模塊408可在應用曾在其上被暫停的同一計算設備上恢復應用。在該情況中,狀態(tài)恢復模塊408可以從本地數(shù)據(jù)存儲庫130(和/或遠程數(shù)據(jù)存儲庫126)取回先前狀態(tài)鏡像。
在方框1804中,狀態(tài)恢復模塊408恢復在先前狀態(tài)鏡像中描述的堆相關的特征。更具體而言,在第一階段中,狀態(tài)恢復模塊408創(chuàng)建包含環(huán)境定義的對象和函數(shù)的初始為空的框架。狀態(tài)恢復模塊408然后遍歷先前狀態(tài)鏡像中的環(huán)境定義的對象和函數(shù)的圖,從而分別向每一個指派唯一的對象ID或函數(shù)ID。
在第二階段中,狀態(tài)恢復模塊408可以基于在對象地圖914和函數(shù)地圖916中提供的信息來恢復應用定義的對象和函數(shù)。例如,狀態(tài)恢復模塊408可以使用JSON解析技術來重新創(chuàng)建應用定義的對象。狀態(tài)恢復模塊408可以通過將應用代碼的指定字符串呈現(xiàn)轉換為該代碼的可執(zhí)行表示來恢復應用定義的函數(shù)。關于對應于原生對象的實例化的應用定義的對象,狀態(tài)恢復模塊408可以使用適當?shù)奶囟ㄓ趯ο蟮淖儞Q器來重新創(chuàng)建這些對象。
在第三階段中,狀態(tài)恢復模塊408可以標識尚未被實例化的聯(lián)系,并且使那些聯(lián)系實例化。例如,環(huán)境定義的對象之間的聯(lián)系在框架初始加載時由環(huán)境自動創(chuàng)建。然而,狀態(tài)恢復模塊408被單獨地應用以恢復應用定義的對象和函數(shù)之間的聯(lián)系,因為那些聯(lián)系被表示為先前狀態(tài)鏡像中的“扁平式指針(flattened pointer)”(例如,參見對象753在圖9中具有的“扁平式指針”$$o752)。狀態(tài)恢復模塊408還恢復應用定義的對象與環(huán)境定義的對象之間的聯(lián)系(并且反之亦然),因為這些聯(lián)系在執(zhí)行環(huán)境使框架初始化時未被自動恢復。在所有情況下,狀態(tài)恢復模塊408使用扁平式指針中的對象ID和函數(shù)ID來確定如何恢復缺少的聯(lián)系。
在方框1806中,狀態(tài)恢復模塊408基于在先前狀態(tài)鏡像的DOM樹部分920中提供的信息來構造DOM樹。狀態(tài)恢復模塊408然后使用在DOM部分920的結尾處出現(xiàn)的補充數(shù)據(jù)來重新建立事件處理器與DOM節(jié)點之間的任何關聯(lián)。狀態(tài)恢復模塊408還以特定于屬性的方式(諸如通過使用于任何“<canvas>”標簽的位圖初始化)來恢復DOM節(jié)點的任何定制屬性。
在方框1808中,狀態(tài)恢復模塊408可以基于從先前狀態(tài)鏡像的定時器相關的部分1002提取的信息來恢復任何活動定時器。假定預期定時器在圖14中示出的間隔1408之后啟動。當應用恢復時,狀態(tài)恢復模塊408可以控制定時器以使得其在該間隔之后啟動。狀態(tài)恢復模塊408還可以指令定時器按照由間隔1410定義的周期性啟動,假定其是間隔型定時器的話。
在方框1810中,狀態(tài)恢復模塊408基于在先前狀態(tài)鏡像的網(wǎng)絡相關的部分1008中給予的信息來恢復任何進行中的網(wǎng)絡連接。其通過標識先前狀態(tài)鏡像中的(由圖13中的監(jiān)視功能1304創(chuàng)建的)任何XMLHttpRequest包裝器對象來執(zhí)行這一任務。狀態(tài)恢復模塊408可以使用由那些對象給予的信息以重新啟動由于應用的暫停而被終止的任何網(wǎng)絡連接。
在方框1812中,狀態(tài)恢復模塊408可以從先前狀態(tài)鏡像的cookie相關的部分1006提取cookie信息。類似地,狀態(tài)恢復模塊408可以從先前狀態(tài)鏡像的DOM相關的部分1004提取DOM相關的信息。狀態(tài)恢復模塊408然后可以將該信息添加到當前計算設備的本地數(shù)據(jù)存儲庫,假定其在該數(shù)據(jù)存儲庫中不是已經(jīng)存在的話。
D.用來提高遷移效率的變體
如在章節(jié)A中描述的,SMM 402通過關于執(zhí)行環(huán)境的操作(例如,瀏覽器的操作)而非計算設備的整體操作表示狀態(tài)來減少與當前狀態(tài)鏡像相關聯(lián)的狀態(tài)信息的量。該規(guī)定轉而允許狀態(tài)信息被以高效方式存儲、轉移和取回。這一章節(jié)描述了被設計用來提高狀態(tài)遷移任務的效率的另外的機制。
在圖19的機制中,開發(fā)者可利用不同的標簽來標記應用代碼1902的特征。特征可對應于上述的任何應用項目,諸如對象、函數(shù)等。標簽標識將被用來執(zhí)行遷移任務的一個或多個方面的不同技術??梢园凑杖魏畏绞?諸如通過向特征添加傳達特定類型的標簽的屬性)利用標簽來注釋特征。
利用指示將以異步方式遷移特征的標簽來注釋至少一個特征1904。更具體而言,狀態(tài)捕捉模塊404可通過將與特征1904有關的狀態(tài)信息存儲在當前狀態(tài)鏡像的特定部分中來回應對這一標簽的檢測。該特殊部分可被稱為異步部分,并且與該部分相關聯(lián)的特征可被稱為異步特征。當前狀態(tài)鏡像的剩余部分可被稱為同步部分,并且與該部分相關聯(lián)的特征可被稱為同步特征。在用來恢復應用的狀態(tài)的指令之后,狀態(tài)恢復模塊408將以上面在章節(jié)C中描述的方式立即恢復所有同步特征。另一方面,狀態(tài)恢復模塊408可以在恢復同步特征之后的稍后時間恢復所有異步特征。
例如,狀態(tài)恢復模塊408可以按照按需方式恢復異步特征,例如,當用戶試圖執(zhí)行需要這些特征中的一個或多個特征的操作時恢復異步特征。備選地或者附加地,狀態(tài)恢復模塊408可以根據(jù)任何恢復調度和/或基于任何觸發(fā)因素來恢復異步特征。例如,在關于應用的操作在后臺發(fā)生的更新任務中,狀態(tài)恢復模塊408可以按照滾動調度恢復異步特征。備選地或者附加地,狀態(tài)恢復模塊408可以在一個或多個資源利用度量在規(guī)定閾值之下時(例如,指示瀏覽器在當前時間未負擔過重,并且因而是恢復異步特征的適當時間)恢復異步特征。
為了提供一個示例,特征1904可屬于應用的不常使用的部分。應用開發(fā)者可根據(jù)用戶在恢復應用之后將不太可能希望與該特征交互而將該特征指定為異步特征。但是,如果用戶的確選擇與需要使用該特征的應用部分交互,則狀態(tài)恢復模塊408可以按照按需方式在此時恢復用于該部分的狀態(tài)。
在一種情況中,應用開發(fā)者可例如基于他的或她的判斷來手動地選擇異步特征的子集。在另一情況中,應用開發(fā)者可查閱統(tǒng)計數(shù)據(jù),這些統(tǒng)計數(shù)據(jù)揭示特征被利用的頻率和/或特征被利用處的應用過程的階段。應用開發(fā)者可使用統(tǒng)計數(shù)據(jù)作為選擇子集異步特征時的指導。
備選地或者附加地,狀態(tài)捕捉模塊404內的自動化代理可以動態(tài)地確定用戶正在使用計算設備的方式,和/或用戶在應用的暫停之前與應用交互的方式。該代理然后可以選擇將被以異步方式恢復的特征的子集。例如,假定用戶看起來排他地僅僅與應用的一部分交互;代理可以檢測到該行為模式,并且將那些特征標記為異步遷移。稍后,狀態(tài)恢復模塊408可以發(fā)現(xiàn)那些特征正在異步地遷移,并且如先前所討論在后臺加載它們或者按需加載它們。另外,狀態(tài)恢復模塊408中的自動化的代理還可以監(jiān)視用戶在應用的恢復之后正在與應用交互的方式?;谠撃J剑砜梢孕薷乃謴蛻玫纳写謴吞卣鞯臅r刻,例如,通過使對不久很可能需要的特征的恢復加速,和/或使對不太可能不久需要的特征的恢復延遲。
在其他情況中,應用開發(fā)者或自動化代理可以在多值范圍(multi-valued scale)內注釋每個特征,從而指示與該特征相關聯(lián)的相關緊急程度。狀態(tài)恢復模塊408然后可以按照具有不同緊急類的組來恢復特征,如由與這些特征相關聯(lián)的特征反映的。
繼續(xù)對圖9的描述,至少一個其他應用特征1906被用指示其將根本不會被遷移的標簽注釋。狀態(tài)捕捉模塊404通過不為特征1906生成并存儲狀態(tài)信息來回應這樣的標簽。例如,應用開發(fā)者可確定特定特征在應用的操作中擔當次要和非關鍵角色,諸如法律免責聲明的顯示。狀態(tài)捕捉模塊404可以從當前狀態(tài)鏡像省略用于這樣的特征的狀態(tài)信息。在其他情況中,特定特征與通常僅在用戶首次加載應用時被調用的函數(shù)相關聯(lián)。狀態(tài)捕捉模塊404可以省略用于這一特征的狀態(tài)信息,因為其在用戶與應用的交互的稍后階段中沒有用或者用處小。應用開發(fā)者可以按照上面闡明的任何方式選擇將被用上述類型的標簽標記的特征的子集,例如,通過以自組織(ad hoc)方式手動地選擇特征,或者通過查閱描述特征在實踐中被使用的方式的統(tǒng)計數(shù)據(jù)。
至少一個其他應用特征1908基于在當前狀態(tài)鏡像中提供的狀態(tài)信息而被用指示其將不會被恢復的標簽標記。相反,標簽指令狀態(tài)恢復模塊408下載該特征的新版本。再一次,應用開發(fā)者可按照上面闡明的任何方式選擇將被用上述類型的標簽標記的特征的子集,例如,通過以自組織方式手動地選擇特征,或者通過查閱描述特征在實踐中被使用的方式的統(tǒng)計數(shù)據(jù)。
其他實現(xiàn)方式可使用其他類型的標簽。上面的示例通過例示而非限制方式被引用。
圖19還示出了堆存儲器1910的一部分。堆存儲器1910中的一些特征(例如,對象、函數(shù)等)具有例如可被表達為這些特征的屬性的標簽。例如,特征1912和特征1914具有相應的標簽。狀態(tài)捕捉模塊404可以按照上述方式檢測標簽并處理相關聯(lián)的特征,例如,通過將用于一些標簽的狀態(tài)信息放置在當前狀態(tài)鏡像的特殊異步部分中,或者通過完全省略用于被標記特征的狀態(tài)信息,等等。子代特征可繼承其父代或祖代的標簽。因此,狀態(tài)捕捉模塊404可以按照如它們的相應的被標記父代/祖代特征相同的方式處理子代特征。
圖20圖示了狀態(tài)恢復模塊408可用來恢復當前狀態(tài)鏡像2002中的狀態(tài)信息的一種技術,其中狀態(tài)信息被分成同步部分2004和異步部分。如上所述,狀態(tài)恢復模塊408可立即恢復與同步部分2004相關聯(lián)的狀態(tài)。狀態(tài)恢復模塊408可為由異步部分2006表示的一個或多個特征產生墊片(shim)對象2008。如果被恢復的應用曾經(jīng)訪問墊片對象2008(指示應用希望使用該特征),則墊片對象2008將恢復與異步部分2006相關聯(lián)的相關特征。
作為被設計用來提高效率的第二規(guī)定,狀態(tài)捕捉模塊404在暫停應用之前可以按照增量方式存儲與應用相關聯(lián)的狀態(tài)信息。一旦應用被暫停,則狀態(tài)捕捉模塊404在需要的情況下可以執(zhí)行對狀態(tài)信息的最后增量更新。借助這樣的技術,SMM 402可以減少在應用被暫停時捕捉狀態(tài)信息所需的時間量。在一種情況中,狀態(tài)捕捉模塊404執(zhí)行上面標識的增量更新操作以捕捉用于如被存儲在計算設備的本地數(shù)據(jù)存儲庫上的DOM存儲值的狀態(tài)信息。也就是說,狀態(tài)捕捉模塊404可以以DOM相關的信息為目標,因為其可表示當前狀態(tài)鏡像的最大部分。
例如,參考圖21,假定在時間t1處,本地DOM存儲裝置2102包含DOM信息的第一實例。該DOM信息被一般地圖示為由被標記為A、B、C等的值組成。在時間t2(t2>t1)處,DOM存儲裝置2102存儲DOM信息的第二實例。如在圖21中以圖形方式表示的,在時間t2處,只有被標記為“B”和“D”的值已經(jīng)改變。因此,狀態(tài)捕捉模塊404可以僅針對與值B和D相關聯(lián)的信息2106的子集來更新當前狀態(tài)鏡像。
更具體而言,狀態(tài)捕捉模塊404可以計算在當前時間存在于本地數(shù)據(jù)存儲庫中的DOM存儲值的散列,或者僅計算正被新添加到本地數(shù)據(jù)存儲庫的值的散列。狀態(tài)捕捉模塊404然后可以用與DOM存儲裝置的先前捕捉的狀態(tài)相關聯(lián)的先前散列的集合來計算當前散列。這一操作產生與自上次狀態(tài)檢查起已經(jīng)改變的DOM存儲值對應的零個、一個或更多個不同散列的集合。狀態(tài)捕捉模塊404然后可以將與改變的值相關聯(lián)的狀態(tài)信息添加到當前狀態(tài)鏡像。在一種情況中,狀態(tài)捕捉模塊404可以將該增量更新信息存儲在本地數(shù)據(jù)存儲庫中。備選地或者附加地,狀態(tài)捕捉模塊404可以將增量更新信息發(fā)送到遠程數(shù)據(jù)存儲庫126以用于存儲。
圖22示出了上述技術的變體。也就是說,如在圖22中一般地指示的,DOM存儲裝置2202可包含不同大小的值;一些值可以極小,并且一些值可以極大。如果值為大,則狀態(tài)捕捉模塊404可以按照邏輯方式將該值分成多條(例如,使用已知的Rabin指紋散列技術),并且僅關于該值的已經(jīng)改變的各條生成用于值的增量更新。值的各條可具有不同的基于內容的大小。
狀態(tài)恢復模塊408還可以(例如,從遠程數(shù)據(jù)存儲庫126)選擇性地下載在計算設備(應用正在其上被恢復)的本地存儲裝置中不是已經(jīng)存在的DOM存儲塊。
圖23是過程2302,其表示狀態(tài)捕捉模塊404的響應于遭遇經(jīng)標記特征的一種操作方式。在方框2304中,狀態(tài)捕捉模塊404標識與特征相關聯(lián)的標簽。在方框2306中,狀態(tài)捕捉模塊404按照取決于該標簽的方式向當前狀態(tài)鏡像添加與特征相關聯(lián)的狀態(tài)信息。例如,如果該標簽指示該特征是異步特征,則狀態(tài)捕捉模塊將狀態(tài)信息存儲在當前狀態(tài)鏡像的異步部分中。
圖24示出了基于與特征相關聯(lián)的標簽來恢復特征的過程2402。在方框2402中,狀態(tài)恢復模塊408標識與狀態(tài)元素相關聯(lián)的分類,其轉而指示相關聯(lián)的特征被用特定標簽標記。在方框2406中,狀態(tài)恢復模塊408按照取決于它的標簽的方式(例如,在它的狀態(tài)信息在當前狀態(tài)鏡像的特殊異步部分中出現(xiàn)的情況下通過異步地恢復特征)來恢復程序特征。
圖25示出了過程2502,其表示狀態(tài)恢復模塊408可恢復已被標記為異步的特征的一種特定方式。在方框2504中,狀態(tài)恢復模塊408例如基于用于特征的狀態(tài)信息在當前狀態(tài)鏡像的異步部分中的存在而標識待恢復的程序特征是異步特征。在方框2506中,狀態(tài)恢復模塊408產生用于程序特征的墊片對象。在方框2508中,狀態(tài)恢復模塊408接收用戶的要與特征交互的請求?;蛘郀顟B(tài)恢復模塊408獨立地選擇恢復考慮中的特征。在方框2510中,狀態(tài)恢復模塊408恢復特征,從而用實際特征替換墊片對象。
圖26示出了用于按照增量方式更新當前狀態(tài)圖像的過程2602。在方框2606中,狀態(tài)捕捉模塊404創(chuàng)建在當前時間存在的值的集合的當前散列。在方框2606中,因為值的該集合在先前時間存在,所述狀態(tài)捕捉模塊404將當前散列與值的該集合所關聯(lián)于的先前散列比較。這一操作產生零個、一個或者更多個不同散列的集合。
在方框2608中,狀態(tài)捕捉模塊404關于與不同散列的集合中的散列對應的值來更新當前狀態(tài)鏡像。在方框2610中,狀態(tài)捕捉模塊404確定應用是否已被暫停。在方框2612中,狀態(tài)捕捉模塊404更新當前狀態(tài)鏡像以使得其反映應用在暫停時的最終狀態(tài)。在圖26的情境中,數(shù)據(jù)“值”具有廣泛含義;例如,在Rabin指紋方法被使用的情況中,值可對應于一條更大的值。
E.代表性計算功能
圖27示出了可用來實現(xiàn)圖1的環(huán)境102的任何方面的計算功能2702。例如,圖22中所示的類型的計算功能2702可用來實現(xiàn)任何用戶計算設備(例如,圖1的客戶端計算設備104和108)、任何服務器計算設備(例如,圖1的應用源116和遷移管理模塊128)等的任何方面。在所有情況中,計算功能2702表示一個或多個物理且有形的處理機構。
計算功能2702可包括一個或多個處理設備2704,諸如一個或多個中央處理單元(CPU)和/或一個或多個圖形處理單元(GPU)等等。
計算功能2702還可包括用于存儲諸如代碼、設定、數(shù)據(jù)等之類的任何種類的信息的任何存儲資源2706。不帶限制地,例如,存儲資源2706可包括以下各項中的任何項:任何一個或多個類型的RAM、任何一個或多個類型的ROM、閃存設備、硬盤、光盤等。更一般而言,任何存儲資源可使用用于存儲信息的任何技術。另外,任何存儲資源可提供對信息的易失性或非易失性的保留。另外,任何存儲資源可表示計算功能2702的固定或者移動的組件。當處理設備2704執(zhí)行存儲在任何存儲資源或存儲資源的組合中的指令時,計算功能2702可執(zhí)行上面描述的任何功能。
關于術語,存儲資源2706中的任何存儲資源或者存儲資源2706的任何組合可被看作計算機可讀介質。在許多情況中,計算機可讀介質表示某種形式的物理并且有形的實體。術語計算機可讀介質還包括傳播信號,例如,經(jīng)由物理管道和/或空氣或其他無線介質等而被傳輸或接收的。然而,特定術語“計算機可讀存儲介質”和“計算機可讀介質設備”明確地排除了傳播信號本身,而是包括所有其他形式的計算機可讀介質。
計算功能2702還包括用于與任何存儲資源交互的一個或多個驅動機構2708,諸如硬盤驅動機構、光盤驅動機構等等。
計算功能2702還包括用于(經(jīng)由輸入設備2712)接收各種輸入并且用于(經(jīng)由輸出設備2714)提供各種輸出的輸入/輸出模塊2710。輸入設備2712可包括鍵入設備、鼠標錄入設備、支持觸摸的錄入設備、語音錄入設備等中的任何設備。一種特定輸出機構可包括呈現(xiàn)設備2716和關聯(lián)的圖形用戶界面(GUI)2718。計算功能2702還可以包括用于經(jīng)由一個或多個網(wǎng)絡2722與其他設備交換數(shù)據(jù)的一個或多個網(wǎng)絡接口2720。一個或多個通信總線2724將上述組件通信地耦合在一起。
一個或多個網(wǎng)絡2722可以按照任何方式被實現(xiàn),例如,通過局域網(wǎng)、廣域網(wǎng)(例如,因特網(wǎng))、點對點連接等,或這些的任何組合。一個或多個網(wǎng)絡2722可包括由任何協(xié)議或協(xié)議的組合管理的硬連線的鏈路、無線鏈路、路由器、網(wǎng)關功能、名稱服務器等的任何組合。
備選地或附加地,前述各節(jié)中所述的任何功能可至少部分地由一個或多個硬件邏輯組件來執(zhí)行。例如,在非限制的情況下,計算功能2702可使用以下各項中的一項或多項而被實現(xiàn):現(xiàn)場可編程門陣列(FPGA);專用集成電路(ASIC);專用標準產品(ASSP);片上系統(tǒng)(SOC);復雜可編程邏輯器件(CPLD)等。
作為結束語,說明書可能在例示性挑戰(zhàn)或問題的情境中描述了各種概念。這種說明方式不構成其他人已經(jīng)以在此指定的方式認識到和/或明確表達挑戰(zhàn)或問題的表示。另外,要求保護的主題也不僅限于解決提到的挑戰(zhàn)/問題中的任何或全部的實現(xiàn)方式。
盡管已經(jīng)用特定于結構特征和/或方法動作的語言描述了本主題內容,但是,將會明白,所附權利要求書中定義的主題內容不一定限于上述特定特征或動作。相反,上述特定特征和動作作為實現(xiàn)權利要求的示例形式而被公開。